Pet*_*ker 67
C++ 11中的"原子"类型有三个独立的问题:
撕裂:读或写涉及多个总线周期,并且在操作过程中发生线程切换; 这可能会产生不正确的值.
缓存一致性:来自一个线程的写入更新其处理器的缓存,但不更新全局内存; 从另一个线程读取读取全局内存,并且在其他处理器的缓存中看不到更新的值.
编译器优化:编译器在假设不从另一个线程访问这些值的情况下改组读取和写入的顺序,从而导致混乱.
使用std::atomic<bool>
可确保正确管理所有这三个问题.不使用std::atomic<bool>
你猜测的叶子,最好是不可移植的代码.
Mat*_*son 18
这一切都取决于你对"原子"这个词的实际含义.
你的意思是"最终值将一次更新"(是的,在x86上,绝对保证一个字节值 - 以及任何正确对齐的值,至少64位),或"如果我将其设置为真(或在我设置之后,没有其他线程会读取不同的值"(这不是很确定 - 你需要一个"锁定"前缀来保证).
归档时间: |
|
查看次数: |
12079 次 |
最近记录: |