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