Volatile是如何保证线程可见的?详解 volatile 主内存 工作内存 jmm 缓存一致性 总线

Volatile是如何保证线程可见的?
摘要
本文以volatile最常见的2个问题为线索,基于汇编lock前缀指令和cpu原子操作等底层知识,初步对volatile的底层原理进行描述。通过本文的论述,基本上能够解释以下2个问题:1)为什么volatile能够保证线程可见性?2)为什么volatile不能实现操作原子性?

研究思路
首先分析jmm内存模型,结合cpu的8个原子操作
然后介绍CPU的缓存一致性协议
最后结合jmm和缓存一致性协议,解释为什么volatile可以保证线程可见
基本概念
首先对后文需要使用的概念做一个描述,主要概念如下

什么是主内存?
主内存是所有的线程所共享的,主要包括本地方法区和堆
所有的变量都存储在主内存中(虚拟机内存的一部分),对于所有线程都是共享的
每条线程都有自己的工作内存,工作内存中保存的是主存中某些变量的拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。
线程之间无法直接访问对方的工作内存中的变量,线程间变量的传递均需要通过主内存来完成
什么是线程工作内存?
CPU不能直接操作主内存的数据,而只能操作数据的拷贝副本,这个副本就存在工作内存中,这样设计的目的是为了提高计算效率,工作内存的效率是主内存的10倍-100倍
工作内存是一个统称,包括L1~L3级缓存以及寄存器。
什么是缓存行?
CPU将变量从主内存加载到工作内存,基本的单位是一个缓存行单元,缓存行的大小是固定的,而不是需要一个int就加载4个字节。
每个缓存行有3部分内容,分别是状态、地址和数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值