深入理解volatile与MESI缓存一致性协议

本文围绕Java中的volatile展开,它是轻量级同步机制,能保证共享变量可见性、禁止指令重排序,但不能保证原子性。还介绍了多级缓存结构、总线锁,重点阐述多核CPU多级缓存一致性协议MESI,包括其缓存状态、状态转换及优化引入的问题,如使用存储缓存解决CPU切换状态阻塞。

volatile

volatile是Java虚拟机提供的轻量级的同步机制。

  • 不能保证原子性
  • 保证volatile修饰的共享变量对所有线程是可见的。也就是当一个线程修改 了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。
  • 禁止指令重排序

关于volatile的相关知识点,已经在以下两篇博文中详细解释了。
volatile详解1
volatile详解2

实例

在这里插入图片描述
volatile为什么会保证有序性?而不能保证原子性?
在对volatile属性进行操作的代码转换为汇编语言语言时,汇编指令代码有lock指令;
查看关于Lock资料:

  • LOCK(前缀) 代表的是总线锁,这个指令对应用程序有用且允许被应用程序使用。
  • 其在修改内存操作时,使用 LOCK 前缀去调用加锁的读-修改-写操作(原子的)。这种
    机制用于多处理器系统中处理器之间进行可靠的通讯。
  • 具体描述如下:
    在 Pentium 和早期的 IA-32 处理器中,LOCK 前缀会使处理器执行当前指令时产生
    一个 LOCK#信号,这总是引起显式总线锁定出现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值