为了账号安全,请及时绑定邮箱和手机立即绑定

如何理解指令重排序对单线程没有什么影响?

如何理解指令重排序对单线程没有什么影响?

弑天下 2019-01-17 10:40:03
如何理解指令重排序对单线程没有什么影响,他不会影响程序的运行结果,但是会影响多线程。 比如: int i = 0; //1 i = i + 1; //2 System.out.println(i); //3 如果执行重排序,将2和3的执行顺序变了,那么肯定会影响运行结果啊。
查看完整描述

4 回答

?
ibeautiful

TA贡献1993条经验 获得超6个赞

首先你要明白指令重排序的意义:处理器在不影响最终计算结果的情况下,尽可能提高计算效率。
如何做到不影响计算最终计算结果?计算的时候是有数据依赖关系的,比如这里的printf,它是依赖数据i的,在i完成最终计算之前不输出。或者说变量值i的计算一定是happens-before printf的。
JMM(java的内存模型)比较特殊,happens-before关系很重要,可以了解一下。

查看完整回答
反对 回复 2019-03-01
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

指令重排不是乱排,2 3存在依赖不会倒过来。。
单线程的指令可以认为是串行执行的,重排的只是

a = 1; // 1
b = 2; // 2
System.out.println(a); // 3
System.out.println(b); // 4

1 2 就可以倒过来,不影响结果,1 32 4 以及 3 4 就不会。。

查看完整回答
反对 回复 2019-03-01
?
波斯汪

TA贡献1811条经验 获得超4个赞

指令重排有个重要的前提 在单线程环境下,指令重排不能影响最终的结果,所以你这里是不能重排的。

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 518 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号