JMM内存模型
2022-07-22 01:16:52 0 举报
JMM内存模型
作者其他创作
大纲/内容
cpu核心L1缓存
Bus总线
修改
如果这个变量比较大,一个缓存行存不下弃用协议,升级为总线锁因为Lock两个缓存行不能保证原子性,只能保证锁一个缓存行的原子性
I完成
线程B也读取了i,状态修改为共享状态
线程A
存在问题
cpu
如果加锁成功失败,则不能修改
线程B修改i
CPU缓存一致性协议MESI
丢弃
L2缓存
i变量共享状态,两个线程同时修改X的话,存在一致性问题
L3缓存
线程B
引用缓存行
E独占
总线裁判通过总线上电路的高低点位来判断(CPU的时钟周期)
栈工作内存(共享变量副本)
主内存
i = 2S -> I
线程A初次读取i,状态为独占状态
变量都加载在缓存行中,争夺缓存行上Lock锁
i = 2
线程A修改i
方法区(共享变量)
本地内存是JMM的一个抽象概念,它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化
如果加锁成功,可以修改
i = 1
对比两个加锁速度
另个cpu核心操作同个变量会接收到消息,并把这个变量副本失效,修改状态为I
M修改
早起利用总线锁,保证缓存一致性,一旦使用,其他线程不能运行访问内存
加锁的同时会发出本地写缓存行的消息
S共享
更改为S共享状态,有多个线程读取这个表变量,需需要维护这个变量保存一致
存在两个cpu核心同时修改变量、加锁,谁来决定加锁的问题
堆(共享变量)i = 0
JMM内存模型
工作内存(共享变量副本)
0 条评论
下一页