c++ 关键词volatile 使用记录

volatile  意思就是多变的,那什么时候才用volatile 呢

个人觉的在嵌入式的工程中或者涉及硬件编程的时候,变量的使用需要,因为很多都是在寄存器中取值。看到网上很多是多线程下最好用这个。

C/C++多线程编程中不要使用volatile。
(注:这里的意思指的是指望volatile解决多线程竞争问题是有很大风险的,除非所用的环境系统不可靠才会为了保险加上volatile,或者是从极限效率考虑来实现很底层的接口。这要求编写者对程序逻辑走向很清楚才行,不然就会出错)

C++11标准中明确指出解决多线程的数据竞争问题应该使用原子操作或者互斥锁。

C和C++中的volatile并不是用来解决多线程竞争问题的,而是用来修饰一些因为程序
不可控因素导致变化的变量,比如访问底层硬件设备的变量,以提醒编译器不要对该 变量的访问擅自进行优化。

简单的来说,对访问共享数据的代码块加锁,已经足够保证数据访问的同步性,再加 volatile完全是多此一举。如果光对共享变量使用volatile修饰而在可能存在竞争的

操作中不加锁或使用原子操作对解决多线程竞争没有任何卵用,
volatile并不能保证操作的原子性,在读取、写入变量的过程中仍然可能被其他线程打断导致意外结果发生。

 

如果项目中编译的时候选择了不优化,是不是就可以不用volatile 。

这里,做下记录,以备忘记。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值