我理解的
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读写之前之后不能重排,我大概知道是并发顺序影响结果与操作器预读取赋值的,但有点模糊,能有完整的具体列子说明为啥指定这个规则嘛