【004】内存屏蔽

358 阅读1分钟
一、系统底层的内存屏蔽

1、sfence :写指令禁止重排
2、lfence:读指令禁止重排
3、mfence:读写均不允许重排


lock指令亦可以实现排序

二、jvm的内存屏蔽

1、内存屏蔽指令
loadload屏障
指令类型:load1 | loadload | load2
load2读指令执行前必须执行完load1
storestore
指令类型:store1 | storestore |store 2
store2写指令执行前必须执行完store1
storeload
指令类型:store1 | storeload | load1
load1指令执行前必须执行完前面的store1
loadstore
指令类型:load1 | loadstore| store1
store1指令执行前必须执行完前面的load1

2、volatile 禁止重排实现

字节码层级
ACC_VOLATILE
jvm层级

3、synchronized 禁止重排实现
字节码层级
方法:ACC_SYNCHRONIZED
代码块:monitor enter | 代码块 | monitor exit | 异常 | monitor exit
jvm层级
底层有C/C++实现,不同的os实现不一样。