什么是std :: atomic <t>上的volatile操作的用例?</t>

时间:2015-03-20 20:57:29

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

关于volatile在多线程代码中的用处,已经有很多争论。大多数人都同意,volatile的主要用例主要用于裸机应用程序,如设备驱动程序和中断处理程序,但不能创建内置类型线程安全的变量。事实上,由于这一点,挥发性因此导致了很多混乱。

但是,它已被添加到std::atomic<T>类型的函数重载中,这表明存在一个用例。这些操作的用途是什么?

1 个答案:

答案 0 :(得分:1)

在编译器不得优化对该变量的访问的意义上,volatile有一般用处。但是,在这种情况下,我认为这主要是因为输入可能是volatile - 就像const一样,你可以&#34;添加&#34;但不是&#34;删除&#34;传递参数的volatile属性。

因此:

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

将接受:

int x;
volatile int y;

foo(&x);
foo(&y);

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