内存屏障——缓存强一致性的编程接口

本文探讨了在MESI协议优化后如何确保缓存强一致性,介绍了内存屏障的重要作用。内存屏障分为写内存屏障和读内存屏障,它们提供了强一致性编程接口。写内存屏障确保store-buffer数据写回主存,读内存屏障则清空无效指令并从主存重新读取。JVM中的JMM通过volatile和synchronized关键字利用内存屏障保证内存可见性和有序性。
摘要由CSDN通过智能技术生成

上篇文章介绍到, MESI 优化后无法保证缓存间的强一致性,这时候如果程序中确实需要强一致性时,该怎么办?答案就是本篇要介绍的内存屏障。

内存屏障,为开发人员提供了一种强一致性的编程接口。内存屏障通常有两种:写内存屏障和读内存屏障。

写内存屏障

cpu 执行到屏障时,会将之前 store-buffer 中的数据写回主存。相当于执行了一次 store-write 操作。

读内存屏障

cpu 执行到该屏障时,会将cpu 中 invalid-queue 中的 invalid 指令全部执行完,重新读取主存内的数据,相当于执行了一次 read-load 操作。

JVM 对内存屏障的支持

JVM 中的JMM 刚好也有类似于高速缓存一致性的问题,所以提供了 volatile 、 synchronized 关键字来实现强制一致性,底层封装了内存屏障的指令操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【非典型Coder】

赏个鸡腿吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值