JMM为什么要规定普通写和volatile读不能重排序?

是否能重排序 第二个操作
第一个操作 普通读/写 volatile读 volatile写
普通读/写 YES NO YES
volatile读 NO NO NO
volatile写 YES NO NO

我理解的对volatile变量的重排序(编译器重排序和处理器重排序),主要目的是为了实现对volatile的写,Happend-Before对volatile的读

所以,按照我理解的话,并不需要像图表中那么严谨

阅读 3.7k
2 个回答

多线程情况下,存在线程工作内存和主内存的同步问题,volatile只是在主内存上即时可取

volatile重排序规则表,是允许普通读/写-》volatile读重排序的,你的表是不是有错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题