指令重排

什么叫指令重排?

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可防止指令重排。

posted @ 2018-05-29 10:20  罗贱人  阅读(531)  评论(0编辑  收藏  举报