【发布时间】:2018-09-20 11:36:26
【问题描述】:
想象有两个线程,一个分配一个值给(已经初始化的)布尔值,另一个线程读取/检查这个布尔值。如果对 bool 的访问没有受到保护或 bool 不是原子的,线程清理程序可能会在此处检测到可能的数据竞争。
这怎么可能?是否有可能分配给 bool 并不总是原子的,例如,因为缓存层次结构或乱序执行等硬件特性?
【问题讨论】:
-
bool不是原子的,使用std::atomic<bool>。 -
问题不在于
bool和std::atomic<bool>之间的一般区别。正如@SkepticalEmpiricist 解释的那样,更多的是关于bool的这种“中间撕裂效应”。
标签: c++ concurrency atomic