首页 > 其他 > 详细

JMM 内存模型数据原子操作

时间:2021-01-26 21:41:17      阅读:31      评论:0      收藏:0      [点我收藏+]

流程:

read(读取):从主内丰读取数据

load(载入):将主内存读取到的数据写入工作内存

use(使用):从工作内存读取数据来计算

assign(赋值):将计算好的值重新赋值到工作内存中

store(存储):将工作内存数据写入主内存

write(写入):将store过去 的变量值赋值给主内存中的变量

lock(锁定):将主内存变量加锁,标识为线程独占状态

unlock(解锁):将主内存变量解锁,解锁后其他线程可以锁定该变量

 

 

 技术分享图片

 

 

 

 

 

JMM缓存不一致问题解决方案

1.总线加锁(性能太低)

  CPU从主内存读取数据到高速缓存,会在总线对这个数据加锁,这样其它CPU没法去读或写这个数据,直到这个CPU使用完数据释放锁之后其它CPU才能读取该数据

2.MESI缓存一致性协议

  多个CPU从主内存读取同一个数据到各自的高速缓存,当其中某个CPU修改了缓存里的数据,该数据马上同步回主内存,其它CPU通过总线嗅探机制可以感知到数据的变化,从而将自己缓存里的数据失效

 

Volatile缓存可见性实现原理 

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

IA-32架构软件开发者手册对lock指令的理解:

1)会将当前处理器缓存行为的数据立即写回到系统内存

2)这个写回内存的操作会引起在其他CPU里缓存了该 内存地址的数据无效(MESI协议)

 

Java程序汇编代码查看

-server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand=compileonly,*VolatileVisibilityTeys.prepareDate

 

Volatile可见性、原子性与有序性

并发编程三大特性:可见性、原子性、有序性

volatile保证 可见性与有序性,但不保证原子性,保证 原子 性需要借助synchronized这样的锁机制 

 

  

 

  

 

JMM 内存模型数据原子操作

原文:https://www.cnblogs.com/baizhou168/p/14330972.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!