返回信息流求佬解答
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #8471058同步于 2025/8/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
关于volatile和synchronized内存屏障的问题
IWhisper#202
2025/8/20镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
对于volatile来说<br>写屏障是在volatile前后分别加storestore和storeload两个内存屏障,这样就能保证本地内存数据副本写入主内存之中吗<br>读屏障是在volatile后加loadload和loadstore屏障,这样就能保证强制从主内存读取最新数据吗<br>对于synchronized来说他的内存屏障又是怎么加的呢
我最近也在复习这部分,读写屏障更多是和指令有序性有关系,是通过和缓存一致性协议实现的可见性。sl屏障后会触发缓存一致性协议,标记对应的缓存为过期,然后才会直接重新从主存取数据
volatile 的实现原理<br><br>volatile 关键字通过以下机制确保变量的可见性:<br><br>内存屏障:在每个读操作前加上 Load 屏障,强制从主内存读取最新的数据;在每个写操作后加上 Store 屏障,强制将数据刷新到主内存。<br><br>缓存一致性协议(MESI协议):当一个线程写入 volatile 变量时,其值会被强制刷入主内存,其他处理器的缓存会被标记为无效,从而确保其他处理器读取到最新的值。<br>【 在 IWhisper#817 的大作中提到: 】<br><font class="f006">: 我最近也在复习这部分,读写屏障更多是和指令有序性有关系,是通过和缓存一致性协议实现的可见性。sl屏障后会触发缓存一致性协议,标记对应的缓存为过期,然后才会直接重新从主存取数据 </font><br>:
禁止指令重排<br><br>指令重排是指编译器和处理器为了优化程序性能而对指令序列进行重新排序。虽然重排序不会影响单线程程序的执行结果,但在多线程环境下可能会导致问题。volatile通过在指令序列中插入内存屏障来禁止特定类型的处理器重排序。<br>【 在 IWhisper#817 的大作中提到: 】<br><font class="f006">: 我最近也在复习这部分,读写屏障更多是和指令有序性有关系,是通过和缓存一致性协议实现的可见性。sl屏障后会触发缓存一致性协议,标记对应的缓存为过期,然后才会直接重新从主存取数据 </font><br>: