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