volatile疑问

我不想取名字09
  • 36

我理解的

CPU:主内存、工作内存、store buffer、invalid queue
JMM 对编译器指令重排:volatile之间不能重排、volatile写与之前不能重排、volatile读与之后不能重排
对CPU重排:LoadLoad、LoadStore、StoreStore、StoreLoad
内存屏障:写、读、读写

问题描述

1.为啥volatile加内存屏障时有4个操作,LoadLoad这四个指令实际操作细节是啥,我理解应该是操作store buffer和invalid queue,加屏障是操作一个CPU的store buffer和invalid queue,还是所有的
2.对编译器的重排
2.1 volatile之间不能重排的原因是把volatile操作看做锁,而不能重排吗
2.2 volatile读写之前之后不能重排,我大概知道是并发顺序影响结果与操作器预读取赋值的,但有点模糊,能有完整的具体列子说明为啥指定这个规则嘛

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

宣传栏