指令重排
什么叫指令重排?
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可防止指令重排。
才学疏浅,有什么问题请大家指出来。十分感谢!