【问题标题】: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<T> 类型的函数重载中,这表明它有一个用例。这些操作的用例是什么?
【问题讨论】:
标签:
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(&y); 变体。