volatile锁

volatile锁在上一个文章中介绍到是一个只对变量修饰的锁。

被volatile修饰的变量在被一个线程读取并修改之后,另一个线程之前读取的数据是无效的,volatile保证第二个线程读到的数据是刷新修改之后的数据。

但是他只能保证,当前读到的结果是正确的,但是无法保证,最后的结果是无法保证正确性的,因为他对自加加是无效的。

有volatile变量修饰的共享变量进行写操作的时候会所处第二行汇编代码,可以通过查看IA-32架构软件开发者手册可知。

(volatile如何保证数据读取正确性,如何清理缓存?)

我们在缓存行中的数据一定是包含他来自内存中的那个地址的,当CPU修改完成数据进行内存刷新的时候,按照存储的地址进行刷新。此时总线按照地址刷新数据的时候,同时也会按照地址匹配缓存行中的符合该地址的数据,使其无效。

在最近处理器中,lock信号一般不锁总线而是锁缓存,因为锁总线的开销比较大,如果锁总线,那么所有的线程就都不能使用总线了。

缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据。也就是阻止两个线程同时往内存刷新。

缓存锁定:同缓存填充,如果缓存行是64B的,就将缓存行中的数据追加到64B,这样就可以避免缓存行中的其他数据堵塞。

最后表明一点,volatile修饰的变量都是会被频繁访问到的,如果访问不频繁的变量,根本就用不到volatile修饰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值