从汇编看volatile

本文探讨了volatile关键字在多线程环境中的作用,解释了编译器优化可能导致的线程间变量不一致问题,并通过C语言代码及反汇编结果展示了volatile如何确保每次操作都写入内存,保证了多线程环境下数据的正确性。
摘要由CSDN通过智能技术生成

在今天这个天气并不晴朗,但依然很开心的日子里,我们一起透过汇编看volatile.

首先一些基础知识


volatile是一个类型修饰符

比如:private volatile int goon;

作用:确保某变量不会因编译器的优化而去读寄存器的值,且要求每次重新去读它所在真正空间的值。

那什么是编译器的优化呢?(请看下面我的理解)

编译器的优化:在一个线程里,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后再取变量值时,就直接从寄存器中取值;

引发的问题如下:

当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致,

1.但当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致,

2.和当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。


下来我们给出一段C语言代码来看看<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值