关于volatile关键字引出的问题
首先我们来看看简单内存模型运行示例图:

cpu不会直接从内存中拿取数据,而是经过一个缓存
这也导致T1线程如果只读(ROT) cache1不更新,后当T2(RAT,刷新cache2,导致两边cache数据不一致(java做了优化,判断为只读,不更新cache1),这就叫cpu缓存不一致。
解决方法:
1.给数据总线加锁(数据总线,地址总线,控制总线)LOCK#
2.CPU高速缓存一致性协议(由Itel提出 MESI协议)!!!!!!
核心思想:当cpu写入数据的时候,如果发现该变量被共享(也就是说,在其他cpu中也存在该变量的副本),会发出一个信号,通知其他cpu该变量的缓存无效。当其他cpu访问该变量的时候,重新到主内存进行获取。

2398



被折叠的 条评论
为什么被折叠?



