假设我们有两个线程,一个正在循环中读取布尔值,另一个可以在特定时间切换它。我个人认为这应该是原子的,因为sizeof(bool)
在 C++ 中是 1 个字节,并且您不会部分读取/写入字节,但我想 100% 确定。
那么是还是不是?
EDIT:
也供将来参考,这是否同样适用于int
?
C++11 中的“原子”类型解决了三个独立的问题:
撕裂:一次读或写涉及多个总线周期,操作中途发生线程切换;这可能会产生不正确的值。
缓存一致性:一个线程的写入会更新其处理器的缓存,但不会更新全局内存;来自不同线程的读取会读取全局内存,并且不会在其他处理器的缓存中看到更新的值。
编译器优化:编译器在假设值不是从另一个线程访问的情况下打乱读取和写入的顺序,从而导致混乱。
Using std::atomic<bool>
确保所有这三个问题都得到正确处理。不使用std::atomic<bool>
让你猜测,充其量是不可移植的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)