深入理解volatile关键字的作用(一)

深入理解volatile关键字的作用(一) (一)计算机内存模型大家都知道在计算机执行程序的时候每条指令都是在cpu中执行的,那么执行指令的同时势必会有读取和写入的操作,那么这样就引申出了一个问题。那么在程序运行时数据的存储是在计算机中的主存中(物理内存)的而内存的读取和写入的速度与cpu的执行指令速度相比差距是很大的,这样就造成了与内存交互时程序执行效率大大降低,因此在cpu中就有了高速缓存。 也就说计算机cpu在执行指令时…

大家好,又见面了,我是你们的朋友全栈君。

 

(一)计算机内存模型

大家都知道在计算机执行程序的时候每条指令都是在cpu中执行的,那么执行指令的同时势必会有读取和写入的操作,那么这样就引申出了一个问题。那么在程序运行时数据的存储是在计算机中的主存中(物理内存)的而内存的读取和写入的速度与cpu的执行指令速度相比差距是很大的,这样就造成了与内存交互时程序执行效率大大降低,因此在cpu中就有了高速缓存。

 也就说计算机cpu在执行指令时将主存中的数据复制到高速缓存中,将结果运算完毕后在将运算结果刷新到主存中。废话不多说看图说话

计算机cpu与主存交互

那么大家也看到了计算机cpu会将运算数据复制到高速缓存中。但是这样如果在单线程是没有问题的(单核多线程也是有问题的)本次只是针对多核多线程讨论so 不废话举个栗子

i=i+1;

当同时有两个线程执行这段代码其实我们想得到的结果是2但是呢计算机cpu可不会按照你想的来,其实它会这样执行,假设我们现在有AB两个线程,同时读取了这段代码(假设i变量初始值为0),同时将变量复制到了高速缓存,A线程将数据执行完毕后将变量刷新到主存中i=1,而B线程也同时执行完毕将变量也刷新到主存中i=1,但是AB变量在运算时读取的都是高速缓存的,AB线程的高速缓存是互相不知道其中的值的,那么这样就引申出了缓存一致性问题。

为了解决缓存一致性问题有两种解决办法:

(1)通过总线加LOCK锁的方式

(2)通过缓存一致协议

早期的cpu中是通过在总线加锁来解决缓存不一致的,因为计算机cpu通信是通过总线来执行的,如果在总线上面加锁的话就阻塞来其他cpu对该变量的访问,如上面的代码在程序执行时总线发出lock指令,那么只有在这段代码执行完毕后其他cpu才能读取变量执行相应的指令,这样就解决了缓存一致性问题。

但是上面的方式会有一个问题,由于在锁住总线期间,其他CPU无法访问内存,导致效率低下。

所以就出现了缓存一致性协议。最出名的就是Intel 的MESI协议,MESI协议保证了每个缓存中使用的共享变量的副本是一致的。它核心的思想是:当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存重新读取。

深入理解volatile关键字的作用(一)

未完待续

参考资料:http://www.cnblogs.com/dolphin0520/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138294.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 随机效应与固定效应&面板数据回归「建议收藏」

    随机效应与固定效应&面板数据回归「建议收藏」转载自:随机效应与固定效应方差分析主要有三种模型:即固定效应模型(fixedeffectsmodel),随机效应模型(randomeffectsmodel),混合效应模型(mixedeffectsmodel)。所谓的固定、随机、混合,主要是针对分组变量而言的。固定效应模型,表示你打算比较的就是你现在选中的这几组。例如,我想比较3种药物

  • Nessus安裝教程[通俗易懂]

    Nessus安裝教程[通俗易懂]1、進入官網2、直接拖進kail3、拷貝此文件至root用戶下(因為安裝Nessus時需要root權限)4、使用命令dpkg-iNessus-10.1.1-debian6_amd64.deb5、啟動Nessus:/bin/systemctlstartnessusd.service6、安裝后進入官網7、註冊后郵箱得到激活密碼8、本地主機輸入連接https://kali(主機名稱):8834/9、進入頁面激活即可…

    2022年10月18日
  • 计算机操作系统-操作系统的定义

    计算机系统的层次结构 用户 应用程序 操作系统 纯硬件:CPU、RAM、ROM 其中,操作系统:从操作系统层往两侧看:负责管理协调硬件、软件等计算机资源的工作 从上往下看:为上层的应用程序和用户提供简单易用的服务 从下往上看:操作系统系统软件,而不是硬件定义OperatingSystem是指控制和管理整个计算机系统的硬件和软件资源,并合理地组…

  • 回归分析数学建模_matlab 回归分析

    回归分析数学建模_matlab 回归分析一元线性回归变量之间的关系大致可分为两大类:确定性的关系:可以用精确的函数关系来表达。例如矩形面积S与边长a,b的关系。非确定性的关系:变量之间既互相联系但又不是完全确定的关系,称为相关关系。例如人的身高与体重、农作物产量与降雨量等的关系。从数量的角度去研究这种非确定性的关系,是数理统计的一个任务.包括通过观察和试验数据去判断变量之间有无关系,对其关系大小作数量上的估计、推断和预测,等等.回归分析就是研究相关关系的一种重要的数理统计方法.一元正态线性回归模型只有两个变量的回归分析,称

    2022年10月31日
  • 利用linux BT5来破解无线 破解无线[通俗易懂]

    利用linux BT5来破解无线 破解无线

  • Microsoft Visio Pro 2016产品密钥激活成功教程完整免费下载「建议收藏」

    Microsoft Visio Pro 2016产品密钥激活成功教程完整免费下载「建议收藏」https://blog.csdn.net/jingxiansheng/article/details/75805699

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号