凭什么我们Java写了一个volatile关键字,系统底层加入内存屏障?两者的关系如何勾搭?
内存屏障是什么?
是一种屏障指令,它使得CPU或编译器对屏障指令的前和后所发出的内存操作执行一个排序的约
束。也称为内存栅栏或栅栏指令。
内存屏障能干吗?
阻止屏障两边的指令重排序
写操作时加入屏障,强制将线程私有工作内存的数据刷回主物理内存
读操作时加入屏障,线程私有工作内存的数据失效,重新回到主物理内存中获取最新值
内存屏障四大指令
三句话总结
volatile写之前的操作,都禁止重排序到volatile之后
volatile读之后的操作,都禁止重排序到volatile之前
volatile写之后volatile读,禁止重排序