如题。我在知乎上看到了这篇回答:多线程编程中什么情况下需要加 volatile? volatile可以保证防止编译器进行优化。但是加锁的时候似乎就会添加编译屏障,防止编译器把变量优化进寄存器里。 这样volatile还有必要加吗?
volatile添加场景是其他线程可能会修改的变量,而编译器认为不修改的话会出错。和加锁时带的barrier正交。比如某一个flag可能会被别人修改,而while(flag)之类如果不加volatile编译器会认为这个值不会有人改就编译成while(1)了。