volatile缓存可见性底层实现原理


volatile关键字:当多个线程进行操作共享数据时,可以保证内存中的数据可见,相较于synchronize而言 volatile关键字是一种较为轻量级同步策略

注意:

  • 1、volatile关键字不具备"互斥性"
  • 2、volatile关键字 不能保证变量的"原子性"

volatile实现原理

volatile的底层实现主要是通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定)并回写到主内存。

IA-32和lntel 64架构软件开发者手册对lock指令的解释:

  • 1)会将当前处理器缓存行的数据立即写回到系统内存。
  • 2)这个写回内存的操作会引起在其他CPU里缓存了该内存地址的数据无效(MESI协议)
  • 3)提供内存屏障功能,使lock前后指令不能重排序

Java程序汇编代码查看

-server -Xcomp -XX: +UnlockDiagnosticMOptions -XX: + PrintAssembly. -
XX:CompileCommand = compileonly, *Volatile Visibility Test.prepare Data

分类:Java
标签:
文章目录