seq_cst订购是否保证即时可见性?

时间:2013-02-13 04:40:24

标签: c++ multithreading c++11 atomic

N3243 1.10.21说

  

可以显示正确使用互斥锁和memory_order_的程序   seq_cst操作可以防止所有数据争用并且不使用其他同步操作   由它们的组成线程执行的操作被简单地交织,每个值计算一个   对象取自该交错中该对象的最后一个副作用。这通常被称为“顺序一致性”。

这是否意味着原子对象上的任何 seq_cst 写入对于使用 seq_cst 排序读取原子对象的其他线程是否立即可见?

1 个答案:

答案 0 :(得分:6)

不,C ++标准中没有任何内容可以保证立即可见。

原子写入应该在“合理”的时间段内对其他线程可见,但它们不一定是立即的,并且没有“合理”的精确定义。

保证的是memory_order_seq_cst次操作的总顺序。因此,没有看到写入值的读取必须在该总顺序中早于写入。由于此总订单包含所有变量和所有 memory_order_seq_cst操作,如果线程之间存在任何通信,则写入必须非常快速地显示。< / p>