volatile底层原理 --CPU缓存模型

cpu可以直接操作自己对应的告诉缓存,不需要直接频繁的跟主内存通信,这样可以保证cpu的计算的效率非常的高。会有一个问题,
在多个CPU 对主内存的操作,而CUP读取数据是从缓存里面获取。而CPU 对主内存做操作,而另一个CPU是不知道。导致数据不一致性的问题。


image.png

有序性问题

对于代码,同时还有一个问题是指令重排序,编译器和指令器,有的时候为了提高代码执行效率,会将指令重排序,就是说比如下面的代码

flag = false;

//线程1:
prepare(); // 准备信息
flag = true;

//线程2:
while(!flag){
Thread.sleep(2000);
}
execute();

重排序之后,让flag = true先执行了,会导致线程2直接跳过while等待,执行某段代码,结果prepare()方法还没执行,资源还没准备好呢,此时就会导致代码逻辑出现异常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容