当前位置: 首页 > article >正文

volatile 系列之如何解决可见性问题

        下面我们来看一下volatile是如何解决可见性问题的呢?如果我们针对stop字段增加volatile关键字:

public static volatile boolean stop=false;

        然后,使用hsdis工具获取IT编译器生成的汇编指令来查看volatile写操作带来的影响和变化。
        接着,设置JVM运行时参数:

-server -Xcomp -XX:+UnlockDiagnosticVMoptions -XX:+PrintAssembly -XX:CompileCommand = compileonly,*VolatileExample.*

得到的结果如下:

0x00000036864f3: lock add dword ptr [rsp],eh ;*putstatic stop
; - org.example.VolatileExample::<clinit>@1 (line 10)

        从上述结果中我们发现,在main线程中修改stop变量的值时,在修改命令前面会增加一个 Lock#信号,这使得基于缓存锁/总线锁的方式达到一致性,从而保证结果的可见。
        关于hsdis 工具的使用方法,(自己去查找一下相关资源),感兴趣的朋友可以自己学习。
        导致可见性问题的根本原因的分析到这里并没有结束,因为除高速缓存带来的可见性问题外,指令重排序也会导致可见性问题


http://www.kler.cn/a/109097.html

相关文章:

  • 设计模式——策略模式(c++)
  • Spring框架之适配器模式 (Adapter Pattern)
  • 障碍检测与避障控制 ROS2机器人
  • 服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
  • 招聘app开发,人才招聘、求职首要方式
  • Git - Think in Git
  • excel技巧
  • JVM虚拟机:从结构到指令让你对栈有足够的认识
  • Kali安装docker
  • 婚礼的魅力
  • 清华训练营悟道篇之操作系统的内存管理
  • Redis的瓶颈在哪里?
  • 第一章 初识Android
  • 强大易于编辑的流程图组织图绘制工具draw.io Mac苹果中文版
  • Epinoia-有状态网络的意图验证模块,略读
  • JavaWeb复习
  • Leetcode—21.合并两个有序链表【简单】
  • Hadoop学习总结(搭建Hadoop集群(伪分布式模式))
  • c++系列——智能指针
  • vue3后台管理框架之将模拟Mock接口替换成真实接口
  • 图情档核心期刊 | 北大核心、CSSCI、CSCD
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • 【数据结构笔记】8.串
  • 《系统之美》读书笔记 - 系统及系统的三大特征
  • 电源控制系统架构(PCSA)之系统控制处理器
  • 考点之数据结构