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

问题描述 投票:3回答:1

N3243 1.10.21说

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

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

c++ multithreading c++11 atomic
1个回答
6
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.