美文网首页
12.3.3对于volatile型变量的特殊规则(gold_ax

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

作者: 胖达_4b7e | 来源:发表于2020-03-24 21:57 被阅读0次

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

    • 可见性
    • 阻止重排

    汇编代码差别

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


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

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

    作用是将

    • 本处理器的缓存写入了内存,
    • 该写入动作也会引起别的处理器或者别的内核无效化(Invalidate)其缓存

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

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

    8种原子指令

    • 锁和解锁
    • 主内存中​
      工作内存->主内存: store,write
      和read load相反​
    • 执行引擎 和 工作内存: use,assign
    • 主内存-> 工作内存 :read,load
      read: 从主内存读到工作内存load: read到在值存入哪个变量的副本​​

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

    ↑等效于: 现行发生原则

    valtile的特殊规定

    • 1.用的值, 必须从主内存拿

    use之前 必须是 read + load

      1. 更新的值,必须更到主内存

    assigin 之后, 必须是 store+write

      1. 不能重排

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

    相关文章

      网友评论

          本文标题:12.3.3对于volatile型变量的特殊规则(gold_ax

          本文链接:https://www.haomeiwen.com/subject/zsaayhtx.html