This question already has answers here:
Can a bool read/write operation be not atomic on x86? [duplicate]
(3个答案)
Do I have to use atomic<bool> for “exit” bool variable?
(3个答案)
7年前关闭。
(3个答案)
Do I have to use atomic<bool> for “exit” bool variable?
(3个答案)
7年前关闭。
atomic<bool>
是不是多余的,因为bool
本质上是原子的?我认为不可能有部分修改的bool值。我何时真正需要使用atomic<bool>
而不是bool
? 最佳答案
除非它是std::atomic*
-something,否则C++中的任何类型都不是“原子的”。那是因为该标准是这样说的。
在实践中,发出的用于操作std::atomic<bool>
的实际硬件指令可能与(或可能不)与普通bool
的硬件指令相同,但是原子性是一个更大的概念,具有更广泛的影响(例如,对编译器重新排序的限制)。此外,原子操作上的某些操作(如求反)会重载,从而在硬件上创建与非原子变量的 native ,非原子读-修改-写序列不同的指令。