C++11标准定义了一个内存模型(1.7,1.10),其中包含内存排序,大致为“顺序一致”、“获取”、“消耗”、“释放”和“松弛”。同样粗略地说,一个程序只有在没有竞争的情况下才是正确的,这发生在所有动作都可以按某种顺序排列,其中一个动作发生在另一个动作之前。动作X在动作Y之前发生的方式是X在Y之前排序(在一个线程内),或者X线程间发生在Y之前。
当X是原子存储,在某个原子变量上具有"release“排序,而Y是在同一变量上具有"acquire”排序的原子加载时,同步- with就会发生。在类似的情况下,Y被加载“消费”排序(和适当的内存访问)时,就会发生依赖排序。synchronizes-with的概念在线程内跨被排序的操作之间传递地扩展了发生之前的关系,但之前是按依赖关系排序的,只能通过称为进位之前的排序依赖关系的严格子集进行传递扩展,该依赖关系遵循一组较大的规则,特别是可以用std::kill_dependency
中断。
那么,“依赖排序”这个概念的目的是什么呢?与更简单的排序前/同步排序相比,它提供了什么优势?由于它的规则更严格,我假设它可以更有效地实现。
你能举一个程序的例子,从发布/获取切换到发布/消费既是正确的,又提供了不平凡的优势吗?std::kill_dependency
什么时候能提供改进呢?高级参数会很好,但对于特定于硬件的差异会有加分。
https://stackoverflow.com/questions/19609964
复制相似问题