12.3.3对于volatile型变量的特殊规则(gold_ax

2020-03-24  本文已影响0人  胖达_4b7e

变量加了volatile修饰以后多了2个特征

汇编代码差别

同一个赋值语句, 给变量加了volatile 以后


ock addl$0x0,(%esp)”操作,这个操作的作用相当于一个内存屏障

“addl$0x0,(%esp)”(把ESP寄存器的值加0)

作用是将

因此也能骑到 “指令重排序无法越过内存屏障”的效果,
因为 指令重排,必须保证 正确的执行结果,
lock addl$0x0,(%esp)指令把修改同步到内存时,意味着所有之前的操作都已经执行完成,
这之前的指令, 就不能跑到这之后

8个原子操作对valtile的特殊规定

8种原子指令

8种原子操作定义+其限定+valtile的特殊规定=描述时候线程安全

↑等效于: 现行发生原则

valtile的特殊规定

use之前 必须是 read + load

assigin 之后, 必须是 store+write

A B 2个线程都 use, A use在前, 就read + load也在前, 更新也一样规则

上一篇 下一篇

猜你喜欢

热点阅读