volatile的实现简单概述

news2025/2/25 12:58:20

文章目录

  • 内存屏障
  • volatile关键字的实现
  • synchronized关键字的实现

内存屏障

在讲解是关键字之前,先来了解下内存屏障的概念。

处理器保障禁止内存重排序的指令被称为基本内存屏障。其作用是禁止该屏障前后之间的操作进行重排序,要确保指令前的操作要先于指令后的操作被提交。
读操作我们用Load表示;写操作我们用Store表示。

屏障名称示例指令序列具体作用
StoreLoadStore1;Store2; StoreLoad;Load1;Load2保证该屏障前的任何一个写操作都会在该屏障后的任何一个读操作数据被加载之前同步到双方的高速缓存中。
StoreStoreStore1;Store2;StoreSotre;Store3;Store4保证该屏障前的任何一个写操作都会在该屏障后的任何一个写操作之前同步到双方的高速缓存中。
LoadLoadLoad1;Load2;LoadLoad;Load3;Load4保证该屏障前的任何一个读操作都会在该屏障后的任何一个读操作之前被加载
LoadStoreLoad1;Load2;LoadStore;Store1;Store2保证该屏障前的任何一个读操作都会在该屏障后的任何一个写操作之前被同步双方高速缓存前被加载。

LoadLoad屏障和LoadStore屏障的组合称为获取屏障。它保障该屏障之前任何读操作于该屏障之后的任何读、写操作。
LoadStore屏障和StoreStore屏障的组合成称为释放屏障。它保证屏障之后的写操作于该屏障之前的任何读、写操作。

volatile关键字的实现

jvm在volatile变量读操作之前插入获取屏障。在volatile变量写操作前插入释放屏障。读线程和写线程通过各自执行的获取屏障和释放屏障保证了有序性。
在这里插入图片描述

如上图,A、B是普通变量,V是用volatile修饰的变量,释放屏障保证了A、B的更新先于V更新提交,这保证了读线程在读取写线程对V的更新时也会读取到写线程对A、B变量的更新。
同时,jvm也会在读线程的volatile读操作后加上一个获取屏障,保证该线程对变量V的读取操作先于对A、B的读取操作。
注意:
屏障只能保证前、后之间的读取、写入顺序。屏障之前或者屏障之后的顺序并不会做保证。比如写线程可以先写入A再写入B,也可能先写入B再写入A,但肯定会先于V的写入。
除了保证有序性外,volatile还具有以下两个作用:

synchronized关键字的实现

jvm会在临界区开始前插入一个获取屏障,在临界区结束后插入一个释放屏障。
获取屏障保证读线程必须先获得锁之后才能进行临界区中的操作;释放屏障保证写线程在临界区中的读、写操作先临界区下面的写操作被提交。这就保证了有序性。

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

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

相关文章

华为OD机试真题 Java 实现【服务中心选址】【2023Q1 100分 】

一、题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址,使服务中心到所有区域的距离的总和最小。 给你一个数组 positions,其中 positions[i] [le…

域名批量查询是否注册-老域名批量查询

域名到期时间批量查询软件 您是否也曾遇到过域名到期或续费时间即将到来,而需要手动一个一个查询每个域名的情况,这不仅费时效率低,还可能会遗漏一些域名。那么,我们为您介绍一款可以帮助您快速、便捷查询多个域名到期时间的软件—…

分享去年学习github命令行操作的笔记

git branch -M main 给远程分支改名 一、本地库操作 1.创建本地目录&#xff0c;用于存储要上传的文本文件。可以手动创建也可以用带命令行 mkdir <文件名> 2.进入文件夹cd <文件名> 3第一次创建时需要初始化仓库git init mac显示隐藏文件SHIFTCOMMAND. mac…

Vue3-黑马(六)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-vueuse &#xff08;2&#xff09;vue3-基础-useRequest &#xff08;3&#xff09;vue3-基础-usePagination &#xff08;1&#xff09;vue3-基础-vueuse 我们在实际中use函数的封装&#xff0c;不用我们自己写&#…

精准室内定位系统源码,采用UWB定位技术开发的智慧工厂定位系统源码

室内定位系统源码&#xff0c;采用UWB定位技术开发的智慧工厂定位系统源码 技术架构&#xff1a;单体服务 硬件&#xff08;UWB定位基站、卡牌&#xff09; 开发语言&#xff1a;java 开发工具&#xff1a;idea 、VS Code 前端框架&#xff1a;vue 后端框架&#xff1a;s…

Linux基础学习---5、磁盘查看和分区类、进程管理类

1、磁盘查看和分区类 1.1 du查看文件和目录占用的磁盘空间 du:disk usage 磁盘占用情况 1、基本语法du 目录/文件 &#xff08;显示目录下每个子目录的磁盘使用情况&#xff09; 2、情况说明选项功能-h以人们较易阅读的GBytes、MBytes、KBytes等格式自行显示-a不仅查看子目录…

iproute2 和 net-tools 介绍

路由&#xff08;Routing&#xff09; 在网络通信中&#xff0c;“路由”是一个网络层的术语。路由是指设备从一个接口上收到数据包&#xff0c;根据数据包的目的地址进行定向并转发到另一个接口的过程。路由表则是若干条路由信息的一个集合体。在路由表中&#xff0c;一条路由…

用Python+OpenCV+Yolov5+PyTorch+PyQt开发的车牌识别软件(包含训练数据)

目录 演示视频 软件使用说明 软件设计思路 演示视频 这是一个可以实时识别车牌的软件&#xff0c;支持图片和视频识别&#xff0c;以下是软件的演示视频。 车牌识别软件 点击查看代码购买地址 软件使用说明 1. 下载源码后&#xff0c;首先安装依赖库。项目所用到的依赖库已…

卷起来了!阿里最新出品“微服务全阶笔记”,涵盖微服务全部操作

近两年&#xff0c;“大厂裁员”总是凭实力冲上各大媒体头条&#xff0c;身在局中的我们早已习以为常。国内的京东&#xff0c;阿里&#xff0c;腾讯&#xff0c;字节&#xff0c;快手&#xff0c;小米等互联网公司都以不同程度的裁员比例向社会输送人才。大量有大厂经验的卷王…

一起打造漂亮的Ubuntu——2023最新版Gnome44

一起打造漂亮的Ubuntu 对于一个工程师&#xff0c;开发者&#xff0c;研究员来说&#xff0c;拥有一台漂亮的机器外加漂亮的系统界面是非常重要的。 作为Ubuntu十年的忠实粉丝&#xff0c;Linux高度依赖用户&#xff0c;无论是工作还是生活&#xff0c;我都一直以来使用着Ubu…

目标检测基础理论

一、基本知识 目标检测中RP什么意思 在目标检测中&#xff0c;RP通常指的是Recall-Precision&#xff0c;即召回率和精确率。召回率是指模型正确识别出的正样本数占所有正样本数的比例&#xff0c;而精确率是指模型正确识别出的正样本数占所有被模型识别为正样本的样本数的比例…

微服务保护——Sentinel

初识Sentinel 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。 解决雪崩问题的常见方式有四种: 超时处理:设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休止等待舱壁…

谷歌浏览器network error解决方法

很多用户在使用谷歌浏览器时候会出现network error网页提示&#xff0c;很多用户不知道该如何处理这一问题&#xff0c;其实解决方法不止一种&#xff0c;小编整理了两种谷歌浏览器network error解决方法&#xff0c;一起来看看吧~ 谷歌浏览器network error解决方法&#xff1…

【精选】新年祝福(C语言),Easyx图形库应用+源代码分享

【精选】新年祝福&#xff08;C语言&#xff09;&#xff0c;Easyx图形库应用源代码分享 博主&#xff1a;命运之光 专栏&#xff1a;Easyx图形库应用 目录 【精选】新年祝福&#xff08;C语言&#xff09;&#xff0c;Easyx图形库应用源代码分享程序展示一、项目环境简单介绍一…

轨道列车救援VR模拟仿真系统

列车故障是地铁运营中常见的问题&#xff0c;如何迅速准确地救援列车故障是保障地铁运营安全的重要措施。为此&#xff0c;广州华锐互动提供轨道列车救援VR模拟仿真系统定制开发&#xff0c;可以在安全、高效的情况下进行列车故障救援演练&#xff0c;有效提高救援人员的应急能…

在 oracle 中执行 sql 语句时,报错:“ORA-00001: 违反唯一约束条件 SYS_C0024202”

在 oracle 中执行 sql 语句时&#xff0c;报错&#xff1a;“ORA-00001: 违反唯一约束条件 SYS_C0024202” 报错信息如下&#xff1a; 表为“WK_ADMIN_USER” 解决方法&#xff1a; 1、查看违反约束的序列对应的数据库表与字段 select a.constraint_name,a.constraint_type,b…

【HTML】

目录 1. 什么是 HTML &#xff1f;HTML 的作用 2. HTML 常见标签 2.1 注释标签 2.2 标题标签&#xff1a;h1 - h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br ​编辑 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.7.1 外…

新入职一个00后卷王,每天加班到12点,太让人崩溃了····

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

CSS3中Flex弹性盒子布局

文章目录 一、介绍二、基本概念三、容器属性1.flex-direction2.flex-wrap3.flex-flow4.justify-content5.align-items6.align-content 四、项目属性1.order2.align-self3.flex 一、介绍 Flex 是 Flexible Box 的缩写&#xff0c;意为“弹性布局”或者“弹性盒子”&#xff0c;…

基于AT89C51单片机的交通灯设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87779238?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 在日常生活中&#xff0c;交通灯是一项必不可少的公共设施&#xff0c;可 以维护道路的畅通和交…