图解volatile 工作原理

volatile工作流程.jpg
  1. Cpu2 读取(read)到主内存中的变量v=0,并将其载入(load)工作内存中存为变量副本,线程2执行引擎使用(use)该变量副本,此时通过总线嗅探机制来监听主内存中v的变化。
  2. Cpu1 读取(read)到主内存中的变量v=0,并将其载入(load)工作内存中存为变量副本,线程1执行引擎使用(use)该变量副本,然后赋值(assign)v=1
  3. 由于变量v加了volatile关键字修饰,会在存储(store)之前加锁(lock),然后通过总线,将变量v=1写入主内存,解除锁定。
  4. 由于v的值发生了改变,并且通过了消息总线,Cpu2 通过总线嗅探机制发现v的值改变了,就会将 Cpu2 工作内存中的变量v=0置为无效状态,当使用(use)该变量时,发现没有这个值,就会冲新区主内存中读取数据,此时读取到的数据就是v=1

你可能感兴趣的:(图解volatile 工作原理)