首页 > 编程语言 > 详细

java volatile的 store load相关指令

时间:2019-11-17 21:40:47      阅读:332      评论:0      收藏:0      [点我收藏+]

java中的volatile,从网上很多资料来看,保证了被修饰变量的可见性以及有序性

对于这个有序性,是通过编译时候生成对应的内存屏障来保证不会被重排序。而这个内存屏障对应的指令码有以下4中:

storestore, storeload, loadload, loadstore

这种xy形式的指令,其语义如下:在xy之前的x操作,不能与xy之后的y操作进行重排序。

对于读的情况,加入的指令如下

loadload

load 读操作

loadstore

对于写,如下所示

storestore

store 写操作

storeload

 

根据以上的两种类型,来仔细查看两种操作的4个组合:读读,读写,写读,写写

读读,如下。这种情况load1和load2是否会被重排序呢?不会,第4行保证了前后的load操作不能重排序

loadload

load1

loadstore

loadload

load2

loadstore 

 

读写,如下。也不会被重排序,第3行的loadstore保证了。

loadload

load1

loadstore

storestore

store1

storeload

 

写读,如下。不会被重排序,第3行的storeload保证了。

storestore

store1

storeload

loadload

load1

loadstore

 

写写,如下。不会被重排序,第4行的storestore保证了。

storestore

store1

storeload

storestore

store2

storeload

 

 参考链接:

  https://www.jianshu.com/p/2ab5e3d7e510

  https://www.jianshu.com/p/a67dc1c11088

  https://www.jianshu.com/p/43af2cc32f90

 

java volatile的 store load相关指令

原文:https://www.cnblogs.com/zhangxuezhi/p/11878207.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!