youyichannel

志于道,据于德,依于仁,游于艺!

0%

Java内存模型 —— JMM_03

内存屏障

两类操作:Store, Load

全排列即可得到四类内存屏障:LoadLoad, LoadStore, StoreStore, StoreLoad

屏障类型 指令示例 说明
LoadLoad Barriers Load1; LoadLoad; Load2 确保Load1数据的状态先于Load2及后续装载指令的装载
StoreStore Barriers Store1; StoreStore; Store2 确保Store1数据对其他处理器可见(刷新到内存)先于Store2及所有后续存储指令的存储
LoadStore Barriers Load1; LoadStore; Store; 确保Load1数据装载先于Store2及所有后续的存储指令刷新到内存
StoreLoad Barriers Store1; StoreLoad; Load2 确保Store1数据对其他处理器变得可见(指刷新到内存)先于Load2及所有后续装载指令的装载。StoreLoad Barriers会使得该屏障之前的所有内存访问指令(存储和装载指令)完成之后,才执行该屏障之后的内存访问指令

StoreLoad Barriers是一个全能型屏障,它同时具有其他三个屏障的效果。但是执行该屏障的开销会很昂贵,因为当前处理器通常要把写缓冲区中的数据全部刷新到内存中(Buffer Fully Flush)。

资料:https://www.bilibili.com/video/BV1iQ4y1b7RB/ 强推 河北王校长