【问题标题】:atomic operation with volatile atomic variable具有 volatile 原子变量的原子操作
【发布时间】:2013-10-05 17:49:02
【问题描述】:

为什么 c++ 原子操作有一个 volatile atomic<T> 的重载版本?

我们什么时候需要将 atomic<T> 声明为 volatile,atomic<T>volatile atomic<T> 之间有什么区别?

【问题讨论】:

  • 为什么我们必须将 atomic 声明为 volatile.. 谁说的?
  • @Nawaz 我认为这是一个错字,真的是在问“我们什么时候需要”,我要求 OP 确认这一点。
  • @Nawaz OP 询问在什么情况下我们必须将其声明为 volatile。
  • @self.: OP 不是在问那个(以为他可能有这个想法)

标签: c++ c++11 atomic


【解决方案1】:

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

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

[ 注意:许多操作都是 volatile 限定的。 “volatile as device register”语义没有改变 在标准中。这种资格意味着在将这些操作应用于 易变的物体。这并不意味着对非易失性对象的操作变得易变。因此,易挥发 在某些情况下,可能会合并对非易失性对象的合格操作。 ——尾注]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多