美文网首页
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

    变量加了volatile修饰以后多了2个特征 可见性 阻止重排 汇编代码差别 同一个赋值语句, 给变量加了vola...

  • 对于volatile型变量的特殊规则

    关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被 正确、完整地理解,以至...

  • volatile语义理解以及Thread实现、调度

    volatile型变量的特殊规则 当一个变量定义为volatile之后,它将具备两种特性. 第一是保证此变量对所有...

  • volatile的作用

    Volatile的介绍: 使用volatile的原因: 用在多线程,目的同步变量 Volatile变量相对于锁更简...

  • Java并发编程-基础模块

    一. volatile 1. volatile的语义 Java内存模型对volatile关键字定义了一些特殊规则....

  • 并发编程

    1.volatile字段理解volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作 例子一:...

  • volatile关键字如何满足并发编程的三大特性的?

    那就要重提volatile变量规则: 对一个volatile域的写,happens-before于后续对这个vol...

  • Java内存模型-2

    来认识下volatile这个关键字。当一个变量被声明为volatile变量后,对于这个变量的读写操作会比较特别。其...

  • Java 内存模型

    目录 一、Java 内存模型的主要目标二、主内存和工作内存三、内存件的交互操作四、对于 volatile 型变量的...

  • 解读volatile

    1.volatile初认识 Volatile 具有可见性和原子性。可见性对于一个volatile变量的读,总是能看...

网友评论

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

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