当前位置:   article > 正文

volatile关键字特性及原理_volatile关键字哪种特性

volatile关键字哪种特性

当一个变量被volatile修饰后,具有两个特性:

  • 保证此变量对所有线程的可见性
  • 禁止指令重排序优化

volatile的使用场景

  • 运算结果不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值
  • 变量不需要与其他的状态变量共同参与不变约束

volatile修饰的变量在赋值后多执行了一个“lock addl $0x0,(%esp)”操作。这个操作相当于一个内存屏障。只有一个CPU访问内存时,并不需要内存屏障;但如果有两个或更多的CPU访问内存,就需要内存屏障来保证一致性。

那么lock指令时如何实现内存的可见性的呢?

答:lock指令使本CPU的Cache写入内存, 该写入动作会引起其他的CPU或者内核无效化

lock指令如何实现禁止指令重排序的呢?

答:lock addl $0x0,(%esp)指令把修改同步到内存时,意味着所有之前的操作已经执行完成,这样便形成了“指令重排序无法越过内存屏障”的效果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/477380
推荐阅读
相关标签
  

闽ICP备14008679号