C++入门——volatile的使用

volatile的使用时机

编译器在把源程序编译为目标代码的时候,通常都会做一些优化。例如,对于一些变量的存放而言,为了提高存取的效率,编译器有时会先把变量读取到一个寄存器中缓存起来,当以后再取变量值时,就直接从寄存器中取值,而不需要再从内存中去读取。在单线程环境下,这样的优化能显著提高程序的运行效率;但是,在多线程环境下就会有潜在的风险。假设一个线程1和线程2共享的变量sharedObj,如果在线程1中把sharedObj缓存在寄存器中,那么当线程2对内存中sharedObj的值进行修改后,线程1无法读取到这个最新的值,因为线程1会从寄存器中读取,而不会从内存中读取。由此可见,在多线程编程的环境下,编译器的优化有可能会带来潜在的问题。volatile恰恰可以解决这个问题。

volatile的作用

volatile是一个类型修饰符(type specifier),用来修饰被不同线程访问和修改的变量。被volatile类型修饰的变量,系统每次用到它的时候都是直接从对应的内存中读取,而不会利用cache中原有数值,系统对这种变量的处理不会做优化。所以,volatile一般用于修饰多线程间被多个任务共享的变量和并行设备硬件寄存器等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值