volatile知识点小复习

- volatile介绍

是什么: volatile是一个关键字,用来修饰变量的,使变量具有某种特点。

1. 那么它具体有什么作用:

被volatile修饰的变量 的特点: 可见性,有序性(注意没有原子性)


下面简单介绍两个特点:

1. 可见性:

​ 线程在修改完变量后立即刷新回主内存并及时发出通知,大家可以去主内存拿最新版,前面的修改对后面所有线程可见。

2. 有序性(禁重排序):

在这里插入图片描述

ps:为什么在平常我们程序使用中没有禁重排序这个问题呢?然后数据依赖性是什么?

看图在这里插入图片描述

所以多线程操作间会需要禁重排序。





OK,在复习了下volatile的特点后,让我们具体看一下使用volatile的操作====>读写操作

2. 对volatile变量读写操作:

在介绍volatile作用时只是大概描述其特点,其具体实现还需要看读写操作。
在这里插入图片描述

​ 为什么volatile修饰的可以在 读时:读到最新的数据。写时:写入数据到本地内存时立刻存到内存。两者都是因为内存屏障。



内存屏障定义:

​ 内存屏障是一种屏障指令,它使得CPU或编译器对屏障指令的前 和 后 所发出的内存操作 执行一个排序的约束。也叫内存栅栏或.栅栏指令在这里插入图片描述

读屏障和写屏障和全屏障(没写)是初略划分,还有细致划分为四个类型。


在介绍内存屏障之前,我们先了解一下volatile的内部结构:

volatile内部结构:在这里插入图片描述

在这里插入图片描述

==>
由volatile内部结构因此引出内存屏障的四个类型

内存屏障的四个类型:

在这里插入图片描述

1. 读屏障(Load Barrier):

​ 在读指令之前插入读屏障,让工作内存或CPU高速缓存当中的缓存数据失效,重新回到主内存中获取最新数据

2. 写屏障(Store Barrier):

​ 在写指令之后插入写屏障,强制把写缓冲区的数据刷回到主内存中

这些屏障运用于读操作和写操作来保持有序性。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 课后思考:如果没有禁重排序呢?实例

1. 问题

在这里插入图片描述

2. 分析

在这里插入图片描述

3. 解决

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值