当前位置: 首页 > 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/news/109097.html

相关文章:

  • excel技巧
  • JVM虚拟机:从结构到指令让你对栈有足够的认识
  • Kali安装docker
  • 婚礼的魅力
  • 清华训练营悟道篇之操作系统的内存管理
  • Redis的瓶颈在哪里?
  • 第一章 初识Android
  • 强大易于编辑的流程图组织图绘制工具draw.io Mac苹果中文版
  • Epinoia-有状态网络的意图验证模块,略读
  • JavaWeb复习
  • Leetcode—21.合并两个有序链表【简单】
  • Hadoop学习总结(搭建Hadoop集群(伪分布式模式))
  • c++系列——智能指针
  • vue3后台管理框架之将模拟Mock接口替换成真实接口
  • 图情档核心期刊 | 北大核心、CSSCI、CSCD
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • 【数据结构笔记】8.串
  • 《系统之美》读书笔记 - 系统及系统的三大特征
  • 电源控制系统架构(PCSA)之系统控制处理器
  • 考点之数据结构
  • nodejs+vue食力派网上订餐系统-计算机毕业设计
  • [GXYCTF2019]Ping Ping Ping 1
  • 计算机网络 期末复习方向
  • Kafka入门05——基础知识
  • asp.net老年大学教务管理信息系统VS开发sqlserver数据库web结构c#编程
  • 正点原子嵌入式linux驱动开发——Linux 串口RS232/485/GPS 驱动
  • 【Leetcode Sheet】Weekly Practice 13
  • ChatGPT从入门到精通
  • 基于vue小红书平台用户数据分析与可视化
  • 【机器学习可解释性】2.特征重要性排列