为什么 C++ 原子操作有 volatile 的重载版本atomic<T>
?
我们什么时候需要声明atomic<T>
为 volatile 和有什么区别atomic<T>
为 volatile 和和volatile atomic<T>
?
它与任何其他类型相同:如果您在内存映射的 I/O 寄存器上执行原子操作,则需要对您的原子进行 volatile 限定,或者需要 volatile 限定类型的语义(在任何原子性或原子操作提供的线程间同步和内存排序的方法)。
该标准对原子( )的volatile
重载有这样的说法29.6.5[atomics.types.operations.req]/3
[ 注意:许多操作都是 volatile 限定的。“作为设备寄存器的易失性”语义在标准中没有改变。此限定意味着在将这些操作应用于易失性对象时保留易失性。这并不意味着对非易失性对象的操作变得易变。因此,在某些条件下,可以合并对非易失性对象的易失性限定操作。——尾注]