请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于重排序的第4种可能

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到主内存的操作, 两者并不能保证连续执行. 应该还是有内存可见性问题的啊…

正在回答

2回答

这里可能是可见性问题,由表面现象我们是没办法推出背后是重排序还是可见性导致的。这也属于由于可见性导致的“重排序”,也就是表面重排序。
0 回复 有任何疑惑可以回复我~
提问者 qq_慕丝0528892 2019-11-20 01:28:02

...

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信