volatile->可见性、有序性->happens-before原则、volatile内存语义(结合JMM理解) happens-before原则>禁止指令重排序(三个层面)->
在volatile的指令前,加入lock前缀。它会产生一组内存屏障,防止重排序。 lock前缀会使写入缓存的数据写回内存,并让其它缓存的数据失效。
(表格)
1.2能保证标志位例子
1.2.3 能保证DCL。DCL中,instance = new XX();
包含三个指令,它们可能被重排序。
if(instance == NULL)
为假时,instance = new XX();
语句已经全部完成。if(instance == NULL)
为假时, new XX();可能才进行到一半。满足happens-before的指令之间不能重排序。hb后的指令能看到hb前的指令的执行结果。
处理器为了加快执行速度,会自行将指令重排序。