是否有任何意义使用限定符 - volatile生成std :: atomic <>对象?

Ale*_*lex 7 c++ atomic c++11

有没有意义用限定符制作原子对象 - volatile?

使用:

volatile std::atomic<int> i(1);
Run Code Online (Sandbox Code Playgroud)

代替:

std::atomic<int> i(1);
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 9

不,绝对没有任何意义std::atomic,因为在内部std::atomic,代码将处理变量可能随时改变的可能性,并且其他处理器可能需要被"告知"它已经改变("告诉"其他处理器不被覆盖" volatile.

你真正需要的唯一时间volatile是你有一个指向你的代码所控制的硬件的指针 - 例如在计时器中读取计数器,或者现在哪个帧缓冲器处于活动状态,或者告诉网卡在哪里读取下一个要发送的数据包的数据.那些东西是不稳定的,因为编译器无法知道这些东西的价值随时都会发生变化.