美文网首页
JMM与volatile

JMM与volatile

作者: 何何与呵呵呵 | 来源:发表于2021-08-16 19:57 被阅读0次

JMM模型

image.png

八大原子操作

image.png

(1)lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态
(2)unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
(3)read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用
(4)load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中
(5)use(使用):作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎
(6)assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量
(7)store(存储):作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作
(8)write(写入):作用于工作内存的变量,它把store操作从工作内存中的一个变量的值传送到主内存的变量中

三大特性

  • 有序
    JMM解决方式:synchronized与Lock加锁,关键字volatile保证一定的有序性
  • 原子
    JMM解决方式:synchronized与Lock加锁
  • 可见性
    JMM解决方式:synchronized与Lock加锁,关键字volatile

指令重排序

volatile禁止重排优化:利用硬件层的内存屏障

  • 硬件层内存屏障
  1. lfence,是一种Load Barrier 读屏障
  2. sfence, 是一种Store Barrier 写屏障
  3. mfence, 是一种全能型的屏障,具备ifence和sfence的能力
  4. Lock前缀,Lock不是一种内存屏障,但是它能完成类似内存屏障的功能。Lock会对CPU总线和高速缓存加锁,可以理解为CPU指令级的一种锁。它后面可以跟ADD,ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR,SBB, SUB, XOR, XADD, and XCHG等指令。

相关文章

网友评论

      本文标题:JMM与volatile

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