volatile关键字

volatile关键字在c、java中都有,用于修饰变量,例如

private volatile int i;

它在多处理器开发环境中保证了共享变量的“可见性”,即当一个线程修改一个共享变量时,另外一个变量能读到这个最新修改的值,那为什么没有被volatile修饰的共享变量存在“可见性”不成立的情况呢?这和计算机的高速缓存有关。

共享变量“可见性”不成立出现的原因

我们都知道计算机中CPU存取的速度很快,而大量数据主要保存在外存中,也就是硬盘或U盘等,外存存储空间大,现在一般都是1T左右,但硬盘I/O速度非常慢,没办法跟上CPU的运行速度,为了适配CPU的速度,让CPU充分发挥性能,现代的计算机在外存与CPU之间加了两层,从CPU出发,依次是高速缓存(cache)、主存,cache位于CPU与主存之间(有些Cache集在CPU芯片之中),用来存放当前运行的程序和数据,它的内容是主存某些局部区域(页)的复制品。它用快速的半导体RAM构成,采取随机存取方式,存储容量较小而速度最快,现在的计算机大多采用三级缓存,容量L1、L2、L3依次递增。主存储器用来存放需CPU运行的程序和数据。用半导体RAM构成,常包含少部分ROM。可由CPU直接编程访问,采取随机存取方式,主存储器就是我们常说的内存,对应的实体就是内存条。整体结构如下图所示

(图片来自:https://www.cnblogs.com/xxp17457741/p/6618293.html):

 

 

我们都知道,程序只有调入内存才能去执行,在一个程序中,线程之间共享的地址空间也是在内存中,而不是高速缓存中,高速缓存,顾名思义,用来做缓存,当CPU想要读写数据时,先将系统内存的数据读到高速缓存中,再进行操作,但操作完不知道何时写回内存,问题就出在了这里,

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值