java中Volatile关键字的原理

news2024/9/25 9:29:30

在这里插入图片描述

Volitile的主要作用就是保持内存可见性和防止指令重排序。我分别说一下这两个作用的实现原理

1.保持内存可见性的实现原理

volatile内存可见性主要通过lock前缀指令实现的,它会锁定当前内存区域的缓存,并且立即将当前缓存的数据写入到主内存(耗时非常短),回写主内存的时候通过MESI协议,使其他线程缓存了该变量的地址失效,从而导致其他线程需要重新去主内存中重新读取数据到其工作线程中。
那么什么是MESI协议呢?
全称Modified,Exclusive,Shared,Invalid,是一种高速缓存一致性协议,它是为了解决多处理器(CPU)在并发环境下,多个缓存不一致的问题而提出的。
Modified(M–修改):表示缓存已经被修改,但是还没被写回主内存,这种状态下,只有一个CPU能独占这个修改状态。
Exclusive(E–独占):表示缓存与主存储器的数据相同,并且缓存的数据是主存储器的唯一拷贝,在这种状态下,只有一个cpu能独占这个状态
Shared(S–共享):表示此高速缓存可能存储在计算机的其他高速缓存中,并且与主存储器匹配,在这种状态下,各个CPU可以并发的对这个数据进行读取,但是都不能进行写操作。
Invalid(I–失效):表示此缓存已经失效或已经过期,不能使用。
MESI 协议的主要用途是确保在多个 CPU 共享内存时,各个 CPU 的缓存数据能够保持一致性。当某个 CPU 对共享数据进行修改时,它会将这个数据的状态从S(共享)或 E(独占)状态转变为 M(修改)状态,并等待适当的时机将这个修改写回主存储器。同时,它会向其他 CPU 广播一个“无效消息”,使得其他 CPU 将自己缓存中对应的数据状态转变为I(无效)状态,从而在下次访问这个数据时能够从主存储器或其他 CPU 的缓存中重新获取正确的数据。
这种协议可以确保在多处理器环境中,各个 CPU 的缓存数据能够正确、一致地反映主存储器中的数据状态,从而避免由于缓存不一致导致的数据错误或程序异常。

2.有序性实现原理

volatile 的有序性是通过插入内存屏障 (Memory Barrier),在内存屏障前后禁止重排序优化,以此实现有序性的。在 Java 内存模型(JMM)中,volatile 关键字用于修饰变量时,能够保证该变量的可见性和有序性。关于有序性volatile 通过内存屏障的插入来实现:

写内存屏障(Store Barrier/Write Barrier): 当线程写入 volatile 变量时,JMM 会在写操作前插入StoreStore 屏障,确保在这次写操作之前的所有普通写操作都已完成。接着在写操作后插入 StoreLoad 屏障强制所有后来的读写操作都在此次写操作完成之后执行,这就确保了其他线程能立即看到 volatile 变量的最新值。
读内存屏障(Load Barrier/Read Barrier): 当线程读取 volatile 变量时,JMM 会在读操作前插入LoadLoad 屏障,确保在此次读操作之前的所有读操作都已完成。而在读操作后插入 LoadStore 屏障,防止在此次读操作之后的写操作被重排序到读操作之前,这样就确保了对 volatile 变量的读取总是能看到之前对同一变量或其他相关变量的写入结果。

那么什么是内存屏障呢?
内存屏障(Memory Barrier 或 Memory Fence)是一种硬件级别的同步操作,它强制处理器按照特定顺序执行内存访问操作,确保内存操作的顺序性,阻止编译器和 CPU 对内存操作进行不必要的重排序。内存屏障可以确保跨越屏障的读写操作不会交叉进行,以此维持程序的内存一致性模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】linuxCNC+Qt+Opencascade+kdl+hal 实时6轴机器人控制器

CNC机器人 程序框架 机器人模型 笔记: debian重启后 无法打开共享目录 最新版搜狗输入法安装后不支持中文,需要安装旧版本的 sogoupinyin_4.0.1.2800_x86_64.deb可用 数控机器人在哪些领域应用有优势 数控机器人在多个领域都展现出了显著的优势&#xff…

IAB视频广告标准《数字视频和有线电视广告格式指南》之 概述- IAB受众和技术标准 - 我为什么要翻译介绍美国人工智能科技公司IAB系列(2)

第二篇 - 概述- IAB受众和技术标准 本文目录 一、IAB技术实验室简介 二、概述及IAB受众 三、资源- IAB倡导的相关视频广告技术标准 四、案例分享-介绍一家数字化营销服务公司 - SproutSocial 五、数字营销工兵观察 六、资料来源及推荐阅读 一、IAB技术实验室简介 随着近…

高频面试必备(Java研发岗),一线互联网架构师设计思想解读开源框架

BeanFactory 和 ApplicationContext 有什么区别? 如何用基于 XML 配置的方式配置 Spring? 如何用基于 Java 配置的方式配置 Spring? 请解释 Spring Bean 的生命周期? Tomcat Tomcat 的缺省端口是多少,怎么修改&…

C++学习随笔(5)——类和对象的深窥

本章我们来学习一下更深入了解一下类和对象! 目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载…

Sui技术帮助Studio Mirai成功实现创意愿景

Brian和Ben Li兄弟对艺术充满热情,通过共同创立的研发工作室Studio Mirai,他们正在探索Web3技术与创意产业的交集。 Studio Mirai的第一个头像类项目(profile picture,PFP)Tamashi存在于Nozomi World中,这…

2024-3-13,14(CSS)

1.复合选择器 有两个或者多个基础选择器,通过不同的方式组合而成。 目的是更加准确高效的选择目标元素(标签) 分类: 后代选择器:选中某个元素的所有后代元素 写法:父选择器 子选择器 {CSS属性}&#x…

Pycharm / idea上传项目到 Github 报错

报错内容: gitgithub.com: Permission denied (publickey).翻译–>gitgithub.com:权限被拒绝(公钥). 出现上述报错的原因:   客户端与服务端的ssh key不匹配   客户端与服务端未生成 ssh key 登录上Github查看ssh key是否存在,如果存在,那么可以对…

蓝桥杯单片机快速开发笔记——定时器

一、基本原理: 定时器的作用: 定时器是一种用于产生精确时间延时的模块,可以在程序中用来进行时间控制、计时等操作。 定时器的工作原理: 51单片机的定时器是通过内部的计数器来实现的,计数器每隔一个固定的时间周期自…

windows 安装 gitlab-runner CICD

点击搜索图标 手动输入PowerShell, 右键点击管理员权限打开, 一、安装 安装 gitlab runner 文档参考地址 1、下载exe执行文件 我这里是 win64 https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe 2、创建 gitla…

通过OceanBase 3.x中not in无法走hash连接的变化,来看OB优化器的发展

作者简介: 张瑞远,曾从事银行、证券数仓设计、开发、优化类工作,现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作。 持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得的专业技能与认…

基于单片机的电子琴设计

基于单片机的电子琴设计 摘 要 读书、看电影、听音乐,都是最常见的丰富内心世界的良剂。听音乐,作为陶冶情操、提升境界最便捷的方式,正受到越来越多人们的欢迎。音乐可以很轻松的融入各种场合,给人们带来很轻松的氛围&#xff…

Pytorch从零开始实战21

Pytorch从零开始实战——Pix2Pix理论与实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——Pix2Pix理论与实战内容介绍数据集加载模型实现开始训练总结 内容介绍 Pix2Pix是一种用于用于图像翻译的通用框架,即图像到图像的转换。…

多人语聊房社交APP开发需要有哪些功能呢?

随着移动互联网的快速发展,社交APP已经成为人们日常生活中不可或缺的一部分。而随着语音社交的兴起,多人语聊房社交APP也逐渐受到了用户的青睐。在开发多人语聊房社交APP时,需要具备一系列功能,以满足用户的需求并提供良好的使用体…

大米自动化生产线的运作原理与科技创新

在当今科技飞速发展的时代,自动化生产线已经成为各个行业提高效率、降低成本的重要工具。而在粮食产业中,大米的自动化生产线更是以其独特的魅力,引领着粮食加工业的转型升级。星派将带您深入了解大米自动化生产线的运作原理,以及…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)

可用于EGL/OpenGLES和媒体数据写入,并显示在XComponent组件。 说明: 该组件从API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 构造参数type为"surface"时不支持。 从API version …

点云配准论文阅读1-Research on Three-Dimensional Point Cloud Registration Algorithm

Research on Three-Dimensional Point Cloud Registration Algorithm三维点云配准算法研究 Publisher: IEEE发行者 : IEEE Cite This引用此内容 PDF Yuqing Zhang; Shilong Sun; Jingjing Shang; Minghan Yang张玉清;孙世龙; 尚晶晶;杨明翰 Abstract: Accordi…

gin框架教程笔记

参考 官方中文文档:https://gin-gonic.com/zh-cn/docs/introduction/ 但是示例截图少 https://www.kancloud.cn/shuangdeyu/gin_book/949411 https://www.topgoer.com/gin%E6%A1%86%E6%9E%B6/ 这个网站不光有gin框架 适合阅读 吉米老师的 :https://www…

unity报错出现Asset database transaction committed twice!

错误描述: 运行时报错 Assertion failed on expression: ‘m_ErrorCode MDB_MAP_RESIZED || !HasAbortingErrors()’Asset database transaction committed twice!Assertion failed on expression: ‘errors MDB_SUCCESS || errors MDB_NOTFOUND’ 解决办法&…

如何看待Figure公司与Open AI合作的最新机器人成果Figure 01?

想象一下,如果有一天,你走进办公室,迎面而来的不是熟悉的同事,而是一位名叫Figure 01的机器人新朋友。它不仅可以帮你倒咖啡,还能跟你聊天,甚至在你加班时给予精神上的支持。听起来是不是像科幻小说的情节&…