为什么易失性在多线程C或C+编程中不被认为是有用的?
如上文所示这个答案我最近发帖说,我似乎对它的效用(或缺乏)感到困惑。volatile
在多线程编程环境中。
我的理解是:当一个变量在访问它的代码的控制流之外被更改时,这个变量应该声明为volatile
..信号处理程序、I/O寄存器和由另一个线程修改的变量都构成这种情况。
所以,如果您有一个全局intfoo
,和foo
读取线程由一个线程读取并由另一个线程原子地设置(可能使用适当的机器指令),读取线程看到这种情况的方式与它看到由信号处理程序调整的变量或由外部硬件条件修改的变量相同。foo
应宣布volatile
(或者,对于多线程情况,使用内存隔离负载进行访问,这可能是一个更好的解决方案)。
我怎么错了,哪里错了?