美文网首页
volatile(2)

volatile(2)

作者: 谁家的猪 | 来源:发表于2019-07-21 10:05 被阅读0次

实现原理

有volatile修饰的共享变量进行写操作时,汇编指令会生成Lock前缀。Lock前缀的指令在多核处理器下会引发两件事:

  1. 将当前处理器缓存行的数据写回系统内存。
  2. 这个写回内存的操作会使其他CPU里缓存了该内存地址的数据失效。

为了提高处理速度,处理器不会直接和内存进行通信,先将系统内存中的数据读到内部缓存,然后进行操作,但是操作完不确定时间写回内存。对使用volatile修饰的共享变量进行写操作,JVM会发出带Lock前缀的指令,将变量所在缓存行的数据写回系统内存。但是其他CPU中的数据还是旧的,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议。每个处理器通过嗅探在总线上传播的数据来检查自己缓存是否失效,当发现自己缓存行对应的内存地址被修改时,就会把当前处理器缓存行的状态设为失效,下次对该数据进行修改操作时,会从系统内存中重新读取数据到缓存中。

相关文章

  • Volatile理解

    Java Volatile1. volatile 理解2. volatile 不保证原子性3. Volatile ...

  • volatile学习

    目录:1.volatile是什么2.volatile的作用3.volatile的原理4.volatile与sync...

  • java学习笔记

    1.volatile 2.JMM(java内存模型) 3.volatile代码可见性 4.volatile代码不保...

  • Java内存模型-volatile内存语义

    章节目录 1.volatile 的特性为什么volatile修饰变量的写操作不是原子性的? 2.volatile ...

  • volatile关键字小总结

    本文内容:1.volatile语义2.由volatile语义引出JMM3.volatile不能保证原子性的解读4....

  • volatile(2)

    实现原理 有volatile修饰的共享变量进行写操作时,汇编指令会生成Lock前缀。Lock前缀的指令在多核处理器...

  • 死磕 java同步系列之volatile解析

    问题 (1)volatile是如何保证可见性的? (2)volatile是如何禁止重排序的? (3)volatil...

  • BiBi -2- 并发编程 - volatile

    From:Java并发编程的艺术 2、volatile volatile是轻量级的,保证“可见性”,体现高手的水平...

  • java多线程

    英文原文中文翻译 13. Java Volatile Keyword volatile关键字有2个作用: 保证读和...

  • Java设计模式-单例

    1、基于volatile 2、基于类初始化

网友评论

      本文标题:volatile(2)

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