关于volatile
在多线程代码中的用处,已经有很多争论。大多数人都同意,volatile
的主要用例主要用于裸机应用程序,如设备驱动程序和中断处理程序,但不能创建内置类型线程安全的变量。事实上,由于这一点,挥发性因此导致了很多混乱。
但是,它已被添加到std::atomic<T>
类型的函数重载中,这表明存在一个用例。这些操作的用途是什么?
答案 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);
变体。