对于 volatile 型变量的特殊规则

当一个变量被定义成 volatile 之后,它将具备两项特性:

  1. 第一项是保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。

  2. 使用 volatile 变量的第二个语义是禁止指令重排序优化

volatile 变量读操作的性能消耗与普通变量几乎没有什么差别,但是写操作则可能会慢上一些,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行。

从硬件架构上讲,指令重排序是指处理器采用了允许将多条指令不按程序规定的顺序分开发送给各个相应的电路单元进行处理。但并不是说指令任意重排,处理器必须能正确处理指令依赖情况保障程序能得出正确的执行结果。

在同一个处理器中,重排序过的代码看起来依然是有序的。

最后更新于