【问题标题】:What's the usecase of volatile operations on std::atomic<T>? [duplicate]std::atomic<T> 上的 volatile 操作的用例是什么? [复制]
【发布时间】:2015-05-24 09:41:54
【问题描述】:

关于volatile 在多线程代码中的用处有很多争论。大多数人都同意,volatile 的主要用例主要用于裸机应用程序,例如设备驱动程序和中断处理程序,而不是使内置类型的变量成为线程安全的。事实上,volatile 也因此导致了很多混乱。

但是,它已被添加到 std::atomic&lt;T&gt; 类型的函数重载中,这表明它有一个用例。这些操作的用例是什么?

【问题讨论】:

    标签: c++ multithreading c++11 atomic volatile


    【解决方案1】:

    volatile 有一个普遍的用处,因为编译器不得优化对该变量的访问。但是,在这种情况下,我认为主要是因为输入可能是volatile - 就像const 的情况一样,您可以“添加”但不能“删除”volatile 属性到传入的参数。

    因此:

    int foo(volatile int *a)
    {
        ... 
    }
    

    将接受:

    int x;
    volatile int y;
    
    foo(&x);
    foo(&y);
    

    如果你没有写 volatile,编译器不应该接受 foo(&amp;y); 变体。

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2019-12-27
      相关资源
      最近更新 更多