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

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

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

牧羊人nacy 2019-05-21 09:44:11
如何理解指令重排序对单线程没有什么影响,他不会影响程序的运行结果,但是会影响多线程。比如:inti=0;//1i=i+1;//2System.out.println(i);//3如果执行重排序,将2和3的执行顺序变了,那么肯定会影响运行结果啊。
查看完整描述

2 回答

?
犯罪嫌疑人X

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

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

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

指令重排不是乱排,23存在依赖不会倒过来。。单线程的指令可以认为是串行执行的,重排的只是
a=1;//1
b=2;//2
System.out.println(a);//3
System.out.println(b);//4
像12就可以倒过来,不影响结果,13、24以及34就不会。。
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 1223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信