指令重排

什么叫指令重排?

int a=0;        //1

int b=1;        //2

int c=2;        //3

int sum=a+b+c;  //4

编写程序的时候顺序是1、2、3、4.但是cpu和编译器为了提高程序的执行效率会按照一定的规则允许指令优化,不影响单线程程序执行结果,但是多线程就会影响程序结果。

什么叫数据依赖?

指不同的程序指令之间的顺序是不允许进行交还的,即可称这些程序指令之间存在数据依赖性。

4对1、2、3都有依赖,1、2、3之间没有什么依赖。所以可能经过编译器处理后指令可能变成3、1、2、4.

volatile可防止指令重排。

猜你喜欢

转载自www.cnblogs.com/rookieJW/p/9103705.html
今日推荐