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

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.lryc.cn/news/211047.html

相关文章:

  • 网络安全(黑客技术)—小白自学
  • MTK AEE_EXP调试方法及user版本打开方案
  • 京东平台数据分析:2023年9月京东扫地机器人行业品牌销售排行榜
  • pytorch 笔记:index_select
  • 面试算法43:在完全二叉树中添加节点
  • Python算法例3 检测2的幂次
  • 线扫相机DALSA--采集卡Base模式设置
  • Gitee 发行版
  • python面向对象
  • Go基础——数组、切片、集合
  • Error: no matching distribution found for tensorflow-cpu==2.6.*
  • nginx 进程模型
  • TypeScript - 枚举类型 -字符型枚举
  • 分布式锁-Redis红锁解决方案
  • 【Ubuntu 终端终结者Ctrl shift e无法垂直分页解决办法】
  • Error: error:0308010C:digital envelope routines::unsupported
  • RTMP在智能眼镜行业应用方案有哪些?
  • 【每日一题】合并两个有序数组
  • MySQL---表的增查改删(CRUD进阶)
  • 《HelloGitHub》第 91 期
  • jvm线上异常排查流程
  • python项目之酒店客房入侵检测系统的设计与实现
  • C++ 学习系列 -- 标准库常用得 algorithm function
  • [论文笔记]E5
  • k8s 1.28版本:使用StorageClass动态创建PV,SelfLink 问题修复
  • 漏洞复现-dedecms文件上传(CVE-2019-8933)
  • vue分片上传
  • 【大数据Hive】hive 表数据优化使用详解
  • 京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜
  • 基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】计算机毕业设计