volatile原理

2020-02-02  本文已影响0人  摸摸脸上的胡渣

语义

不允许在缓存中操作volatile变量,且任何的写操作都会直接作用于内存,并且使得其他缓存行中的缓存失效。

实际作用

禁止指令重排和保持可见性。
不仅作用于被修饰的变量,还作用于当前变量所处的代码上下文。

指令重排

指令重排的概念是,编译器和处理器,会将一些命令的执行顺序进行调整,以达到提高程序执行效率的目的。
但会保证调整顺序的代码执行结果,和未调整顺序且单线程执行状态下结果一致。

汇编实现代码

0x0000000109f8757b: lock cmpxchg %rdi,(%rbx)

汇编代码内存语义

lock的作用同语义
会加一个总线锁,应用MESI协议保证volatile变量的可见性

JVM底层实现原理

最终生成的汇编代码,会使用

lock

命令来实现禁止指令重排的功能。

参考

《java并发编程的艺术》 2.1 P21

上一篇 下一篇

猜你喜欢

热点阅读