volatile如何保障可见性 和有序性

JMM内存模型描述了线程的工作内存和主存之间的交互,其中工作内存是线程私有的,主存是共享的。通过L1、L2、L3缓存解决CPU与内存速度差异。内存操作包括read、load、use、assign、store等,volatile关键字确保多线程下的可见性和有序性,通过Lock指令和内存屏障防止指令重排序和并发写入问题,维持缓存一致性。
摘要由CSDN通过智能技术生成

JMM内存模型;工作内存和主存。工作内存是线程私有,主存共享的;
主存和工作内存直接有L1 L2 L3的三级缓存,用来解决cpu和内存速度查的问题。
内存有八大原子操作 包括
read:内存读取数据,load 主内存读取的数据写入工作内存,use:工作内存读取数据计算
assign:计算好的值重新赋值到工作内存 store 存储 工作内存数据写入主内存 write store的变量赋值给主内存的变量。 lock:主内存变量加锁,标志线程独占 ,unlock,解锁后其他线程可以锁定该变量
如果不加volatile修饰 变量先从主存读取数据,读取后计算重新赋值,然后再在某个时刻将变量同步到主存,这时候会有总线嗅探机制,通过MESI缓存一致性协议让工作内存的变量失效。但是时机不一定。 加了volite
通过汇编的Lock前缀指令,锁定这块内存区域,进行缓存锁定,防止并发写入问题
工作内存就会立即将数据同步到主存,会引起其他工作内存缓存的该内存地址失效MESI,提供内存屏障 ,在lock 之前不能指令重排序

通过加内存屏障来保证有序性,就是禁止指令重排序。指令重排序的原则是单线程下执行结果不变;volatile保证的是多线程下的乱序问题;比如双端检索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值