逐一解释一下四个 “内存屏障” 是什么

什么是内存屏障?硬件层⾯,内存屏障分两种:读屏障(Load Barrier)和写屏障(Store Barrier)。内存屏障有两个作⽤:

  1. 阻⽌屏障两侧的指令重排序;
  2. 强制把写缓冲区/⾼速缓存中的脏数据等写回主内存,或者让缓存中相应的数据失效。

注意这⾥的缓存主要指的是CPU缓存,如L1,L2等(这里所提到的缓存是指CPU缓存,例如L1,L2等级别的缓存。这是因为在计算机系统中,还存在其他类型的缓存,比如磁盘缓存、网络缓存等等。因此,这个主句的作用是强调内存屏障所涉及到的缓存类型,避免混淆。)

编译器在⽣成字节码时,会在指令序列中插⼊内存屏障来禁⽌特定类型的处理器重排序。编译器选择了⼀个⽐较保守的JMM内存屏障插⼊策略,这样可以保证在任何处理器平台,任何程序中都能得到正确的volatile内存语义。这个策略是:

  1. 在每个volatile写操作前插⼊⼀个StoreStore屏障;
  2. 在每个volatile写操作后插⼊⼀个StoreLoad屏障;
  3. 在每个volatile读操作后插⼊⼀个LoadLoad屏障;
  4. 在每个volatile读操作后再插⼊⼀个LoadStore屏障。

示意图⼤概是这个样⼦:

LoadLoad屏障:对于这样的语句Load1; LoadLoad; Load2,在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。

StoreStore屏障:对于这样的语句Store1; StoreStore; Store2,在Store2及后续写⼊操作执⾏前,保证Store1的写⼊操作对其它处理器可⻅。

LoadStore屏障:对于这样的语句Load1; LoadStore; Store2,在Store2及后续写⼊操作被刷出前,保证Load1要读取的数据被读取完毕。

StoreLoad屏障:对于这样的语句Store1; StoreLoad; Load2,在Load2及后续所有读取操作执⾏前,保证Store1的写⼊对所有处理器可⻅。它的开销是四种屏障中最⼤的(冲刷写缓冲器,清空⽆效化队列)。在⼤多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能

再介绍⼀下volatile与普通变量的重排序规则:

  1.  如果第⼀个操作是volatile读,那⽆论第⼆个操作是什么,都不能重排序;
  2. 如果第⼆个操作是volatile写,那⽆论第⼀个操作是什么,都不能重排序;
  3. 如果第⼀个操作是volatile写,第⼆个操作是volatile读,那不能重排序。

如果是下列情况:第⼀个操作是普通变量读,第⼆个操作是volatile变量读,那是可以重排序的:

// 声明变量
int a = 0; // 声明普通变量
volatile boolean flag = false; // 声明volatile变量
// 以下两个变量的读操作是可以重排序的
int i = a; // 普通变量读
boolean j = flag; // volatile变量读

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软考备战·希赛网每日一练】2023年4月18日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源:2023年04月18日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: MTTF:平均无故障时间 MTTR:平均故障修复时间 可用性/可靠性MTTF…

一觉醒后ChatGPT 被淘汰了

OpenAI 的 Andrej Karpathy 都大力宣传,认为 AutoGPT 是 prompt 工程的下一个前沿。 近日,AI 界貌似出现了一种新的趋势:自主人工智能。 这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归…

zookeeper + kafka集群搭建详解

目录 1.消息队列介绍 1.为什么需要消息队列 (MO) 2.使用消息队列的好处 3.消息队列的两种模式 2.Kafka相关介绍 1.Kafka定义 2.Kafka简介 3. Kafka的特性 3.Kafka系统架构 1. Broker(服务器) 2. Topic(一个队…

SAR ADC系列25:作业和上机实践

作业: 异步SAR逻辑中VALID信号如何产生?答:OUTP和OUTN与非。单纯通过减小“比较器环路”的延时(t1t22*t32*t4)的方式来提升ADC的转换速率可行吗?为什么?答:不可行,还要考虑CDAC建立的速度&…

人工智能大模型多场景应用原理解析

前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后,收到大量读者的反馈,诸如:在了解了核心原理后想进一步了解未来的发展趋势(比如生成式人工智能和元宇宙能擦出什么样的火花?),大模型…

抢鲜发布:Flutter 3.7更新详解

本文首发自「慕课网」(imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:CrazyCodeBoy|慕课网讲师 新年伊始,由 Flutter 3.7 正式版来「打头阵」!我们与整个…

Parallels Desktop for Mac 适用于苹果 macOS 的 PD 虚拟机(安装使用详细教程)

简介 Parallels Desktop for Mac 是一款适用于苹果 macOS 操作系统的虚拟机软件,可以让用户在 Mac 上运行 Windows、Linux 等其他操作系统,同时也可以在虚拟机中安装其他软件和应用程序。Parallels Desktop for Mac 还提供了许多实用的功能,…

【蓝桥杯】数组中存在K倍区间的子数组个数

文章目录 前言题目分析算法难度实战1、创建算法2、创建测试用例3、运行测试用例4、测试结果 总结 前言 蓝桥杯全国软件和信息技术专业人才大赛由工业和信息化部人才交流中心主办,每年参赛人数超过30000人。蓝桥杯大赛作为国内领先的全国性 IT 学习赛事,持续有力支撑…

软件测试员----面试,你准备好了么?

最近有机会做一些面试工作,主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色,经历了不少次的面试之后,多少也积累一点面试的经验,现在发生了角色转变。初次的面试就碰到个工作年限比我长的,也没有时间…

【jvm系列-04】精通运行时数据区共享区域---堆

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

罗丹明-聚乙二醇-生物素RB-PEG-Biotin;Biotin-PEG-Rhodamine,PEG2000

RB-PEG-Biotin 罗丹明-聚乙二醇-生物素 中文名称:罗丹明-聚乙二醇-生物素 英文名称:RB-PEG-Biotin 分子量(PEG ):2000、3400、5000,其他分子量可以定制。 用 途:仅供科研实验使用。 性状&…

不会注册ChatGPT?4个国内网站让你尽情体验

最近火出圈的科技新词非“ChatGPT”莫属了。 但是由于ChatGPT注册起来比较困难,我到现在都还学不会如何注册.... 但是!世上无难事!只要有心人! 我千辛万苦终于找到几个ChatGPT平替的网站了。 AI中文智能对话 地址:…

DPDK入门(环境搭建以及小demo)

文章目录零、从0开始配置dpdk环境的虚拟机一、dpdk的编译usertool/dpdk-setup.sh二、dpdk需要什么配置来支持1.多队列网卡2.巨页三、解析接收网络数据的过程经历了什么1.物理网卡2.NIC3.内核协议栈4.标准接口层Posix API5. 应用层上述过程发生的拷贝四、DPDK介绍基于上述接收网…

人人看得懂的AI教程

人人看得懂的AI教程,从0开始入门AI教程,一步一步AI,人工智能学习笔记 现在写书真的方便,闲来无事写了本从0开始学AI的书籍,哈哈 一、基础知识 1.1 人工智能概览 1.2 机器学习 1.3 深度学习 1.4 数据科学 二、编程知…

chatGPT中文版入口-chatGPT不可以用的地区

ChatGPT老出现不可用 如果您在使用ChatGPT时发现它经常不可用,可能是由于以下原因: OpenAI API的服务不稳定。由于技术问题、网络问题或维护(如软件更新)等原因导致OpenAI API服务不稳定,会导致ChatGPT无法使用。 接…

2345看图王阻止文件删除和U盘弹出 - 解决方案

2345看图王阻止文件删除和U盘弹出 - 解决方案前言2345看图王解决方案临时方案永久方案前言 用户在使用2345看图王查看图片后,可能会出现图片文件/文件夹无法删除或U盘无法弹出等问题,这是因为2345看图王的辅助模块正在占用图片文件,因此无法…

VS2022下载安装与基本使用(写C语言)

最近遇到一种问题,就是想要写一写C语言的代码,但是网页编辑器功能不全,GCC需要安装Liunx系统,VS又体量太大过于复杂,用keil又需要连接硬件,所以比较纠结。 工作中通常使用的是Keil,但是如果有时…

Nginx实现会话保持,集群模式下session域共享

前言 生产环境下,多数系统为了应对线上多种复杂情况而进行了集群架构的部署,保证系统的高性能、价格有效性、可伸缩性、高可用性等。通常将生产环境下的域名指向Nginx服务,通过它做HTTP协议的Web负载均衡。 session是什么 在计算机中&…

8万字智慧旅游景区信息化建设方案word

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1.1. 整体建设框架 XXXXXX智慧景区旅游建设对于全面整合景区旅游资源,提升景区旅游产业发展能级,进一步增强景区旅游业的核心竞争力具有十分重要的支…

【Python搞笑游戏】因蔡徐坤打篮球动作超火,被某程序员写成了一款游戏,画面美到不敢看,成功学到了精髓~(附源码免费)

导语 之前网络最火的梗,非“C徐坤打篮球”莫属。个人感觉,只有多年前的“春哥纯爷们”堪与匹敌! 虽然说C徐坤打篮球是一个老梗了,但是确实非常搞笑,今天就跟着小编一起来回忆一下吧! “我是练习两年半的…