如下的 写 和 读 就是对 volatile 变量进行变量值的读写操作。
为什么在写操作后加入StoreLoad
因为storeLoad 相当于一个存储屏障和加载屏障,能够把执行处理器的写缓冲区的内容冲刷到高速缓存中去,还能情况执行处理器的无效化队列,把其他处理器的更新情况更新到执行处理器当中。
为什么在写操作前加入释放屏障
保证了volatile写操作与该操作之前的任何读、写操作都不会进行重排序。从而保证了volatile写操作之前,任何的读写操作都会先于volatile被提交。
为什么在读操作前加入LoadLoad
因为LoadLoad 能够清除无效化队列,读到其他执行处理器的更新情况。
为什么在读操作后加入获取屏障
获取屏障(LoadLoad屏障
与LoadStore屏障
)禁止了volatile读操作与其之后的任何读写操作进行重排序。保障了volatile变量读操作之后的任何读写操作,volatile的写线程的更新已经对其可见。