#编译乱序 (由编译器所决定)
可增加barrier()来防止。
#执行乱序 :没有按照编译好的指令次序执行,由CPU所决定,如cache, 访问阻塞,多核等原因造成
在多核的系统,一段代码中由一部分可以在一个CPU0执行,而另外一部分代码可以在CPU1上执行。这样就不能保证代码按预期顺序执行。
处理器为了处理由于多核间一个核的内存行为对另外一个核可见的问题,引入了内存屏障的指令(这一段时间另外一个核不可见)。DMB(), DSP(), ISB().
当我们要访问外部的寄存器的时候需要顺序执行,这时候也需要内存屏障指令。Linux 已经进行了封装如readb(), writeb()等操作。
原文:https://www.cnblogs.com/zjbfvfv/p/13385050.html