指令重排

什么是指令重排:计算机并不是按照你写的代码的顺序去执行。

源代码->编译器优化的重排->指令并行也可能重排->内存系统也会重排->执行

处理器在进行指令重排的时候,考虑:数据之间的依赖性

int x = 1; //1

int y = 2; //2

x = x + 3; //3

y = x * x; //4

我们期望的顺序:1234,但可能是2134,1324

 

volatile可以避免指令重排

volatile可以保证可见性,但不能保证原子性,由于内存屏障,可以保证避免指令重排的现象产生!

posted @ 2021-08-06 18:10  gdstcymc  阅读(186)  评论(0)    收藏  举报