关于重排序的第4种可能

来源:12-6 重排序1

qq_慕丝0528892

2019-11-20

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回答

悟空

2019-11-20

这里可能是可见性问题,由表面现象我们是没办法推出背后是重排序还是可见性导致的。这也属于由于可见性导致的“重排序”,也就是表面重排序。
0
1
qq_慕丝0528892
非常感谢!
2020-03-01
共1条回复

qq_慕丝0528892

提问者

2019-11-20

...

0
0

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程