N3243 1.10.21说
可以显示正确使用互斥锁和memory_order_的程序 seq_cst操作可以防止所有数据争用并且不使用其他同步操作 由它们的组成线程执行的操作被简单地交织,每个值计算一个 对象取自该交错中该对象的最后一个副作用。这通常被称为“顺序一致性”。
这是否意味着原子对象上的任何 seq_cst 写入对于使用 seq_cst 排序读取原子对象的其他线程是否立即可见?
答案 0 :(得分:6)
不,C ++标准中没有任何内容可以保证立即可见。
原子写入应该在“合理”的时间段内对其他线程可见,但它们不一定是立即的,并且没有“合理”的精确定义。
保证的是memory_order_seq_cst
次操作的总顺序。因此,没有看到写入值的读取必须在该总顺序中早于写入。由于此总订单包含所有变量和所有 memory_order_seq_cst
操作,如果线程之间存在任何通信,则写入必须非常快速地显示。< / p>