5

为什么 C++ 原子操作有 volatile 的重载版本atomic<T>

我们什么时候需要声明atomic<T>为 volatile 和有什么区别atomic<T>为 volatile 和和volatile atomic<T>

4

1 回答 1

4

它与任何其他类型相同:如果您在内存映射的 I/O 寄存器上执行原子操作,则需要对您的原子进行 volatile 限定,或者需要 volatile 限定类型的语义(在任何原子性或原子操作提供的线程间同步和内存排序的方法)。

该标准对原子( )的volatile重载有这样的说法29.6.5[atomics.types.operations.req]/3

[ 注意:许多操作都是 volatile 限定的。“作为设备寄存器的易失性”语义在标准中没有改变。此限定意味着在将这些操作应用于易失性对象时保留易失性。这并不意味着对非易失性对象的操作变得易变。因此,在某些条件下,可以合并对非易失性对象的易失性限定操作。——尾注]

于 2013-10-05T21:13:02.940 回答