为什么c ++原子操作对volatile atomic<T>
有一个重载版本?
我们何时需要声明atomic<T>
为易变品,atomic<T>
和volatile atomic<T>
之间有什么区别?
答案 0 :(得分:4)
它与任何其他类型相同:如果您在内存映射的I / O寄存器上执行原子操作,或者需要volatile属性类型的语义(不是),则需要对您的原子进行volatile限定以任何方式与原子性或原子操作提供的线程间同步和内存排序相关联。)
标准对于原子的volatile
重载(29.6.5[atomics.types.operations.req]/3
)
[注意:许多操作都是挥发性合格的。 “作为设备寄存器的易失性”语义没有改变 在标准中。此资格意味着在应用这些操作时会保留波动性 易变物。这并不意味着对非易失性对象的操作变得易变。因此,易变 非易失性对象上的合格操作可能在某些条件下合并。 - 后注]