12-6视频中说的第4种可能是x=0 , y=0
执行过程为y=a; -> a=1; -> x=b; -> b=1;
但是这里有没有可能不是指令重排序的问题而是内存可见性的问题?
过程:
线程1 a=1; -> 切换线程2 b=1;
因内存可见性问题: 线程1的a和线程2的b都没有从工作内存刷新到主内存
这时继续执行:
线程2 y=a;(主内存为0); 切换线程1 x = b(主内存为0);
这样结果也是 x=0 , y=0
.
如果说一定是重排序问题而不是内存可见性问题的话,
我是这么理解的不知道对不对:
比如a=1的字节码操作是
load a
set to 1
store a
.
而store指令就已经把a刷新到主内存中了, 所以a=1在这里不属于内存可见性问题.
但jmm同步原则在工作内存Store之后有一个Write到主内存的操作, 两者并不能保证连续执行. 应该还是有内存可见性问题的啊…