4

N3243 1.10.21 说

可以证明,正确使用互斥锁和 memory_order_seq_cst 操作来防止所有数据竞争并且不使用其他同步操作的程序表现得好像它们的组成线程执行的操作只是交错的,对象的每个值计算都取自交错中对该对象的最后一个副作用。这通常被称为“顺序一致性”。

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

4

1 回答 1

7

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

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

保证的是有一个单一的总memory_order_seq_cst操作顺序。因此,没有看到写入值的读取必须在该总顺序中比写入更早发生。由于这个总顺序包含所有变量和所有 memory_order_seq_cst操作,如果线程之间有任何通信,那么写入必须很快变得可见。

于 2013-02-13T10:48:31.587 回答