Volatile
2022-07-02 00:24:41 0 举报
AI智能生成
volatile
作者其他创作
大纲/内容
内存语义
当写一个volatile修饰的共享变量时,JMM会把该线程对应的工作内存中共享变量值,立刻刷新会主内存
当读一个volatile修饰的共享变量时,JMM会把该线程对应的工作内存中共享变量值设置为无效,重新从主内存读取
特性
可见性
保证不同线程对共享变量的最新值及时可见,即共享变量一旦改变马上可见
JMM内存模型
MESI缓存一致性协议保证
总线嗅探机制保证
不保证原子性
从主内存读取共享变量之后,对于共享变量的操作分为了三步(加载、计算、赋值),volatile保证加载数据最新,导致写数据丢失
禁止指令重排序
(有序性)
(有序性)
什么是重排序
编译器、优化器为了优化程序性能,在保证程序执行结果的情况下,会改变程序语句的先后顺序
不存在数据依赖关系的可以重排序,存在数据依赖关系的禁止重排序
内存屏障
读屏障 Load Barrier
在读指令之前插入读屏障,让工作内存中的共享变量值立刻失效,重新从主内存读取
写屏障 Store Barrier
在写指令之后插入写屏障,强制把写的数据刷新回主内存
四种规则
LoadLoad
在每个volatile读操作之后插入一个LoadLoad屏障
禁止下面所有的普通读操作和上面的volatile读操作重排序
LoadStore
在每个volatile读操作之后插入一个LoadStore屏障
禁止下面所有的普通写操作和上面的volatile读重排序
StoreStore
在每个写操作之前插入一个StoreStore屏障
禁止上面的普通写和下面的volatile写重排序
StoreLoad
在每个写操作之后插入一个StoreLoad屏障
防止上面的volatile写和下面可能有的volatile读/写重排序
JMM
8大原子操作
read 读取
load 加载
use 使用
assign 赋值
store 存储
write 写入
lock 锁定
unlock 解锁
原子操作流程图
使用场景
状态标志位
DoubleCheck单例
重点
volatile特点
可见性、不保证原子性、禁止指令重排序(有序性)
内存屏障
0 条评论
下一页