volatile的使用

本文详细解释了volatile关键字的作用及其在多线程环境中的重要性,同时也介绍了mutable如何允许在常成员函数中修改特定变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           volatile的意思是易变的,用来修饰变量和const是相反的。注意:它们不能同时修饰一个变量。

       作用

      使用volatile修饰的变量,编译器不会进行优化,因为有时为了追求速度和性能,编译器会临时存储变量到寄器,因为cpu从寄存器取变量的值比直接从内存中取变量的值快,程序在使用这个变量的时候就直接到寄存器中取得。但是这样的话,会导致一个问题,就是比如在一个多线程的程序中,这个线程使用这个保存在寄存器的值,但是其它线程已经改变了存储在内存的值,那么这个寄存器的值就是无效的。如果用volatile修饰了的话,编译器不 会做优化,每次取值必须到内存中去取值,这样的坏处就是付出了时间的代价,具体怎么使用,就要看场合了,我用的不多,所以在什么情况用,什么情况又不用,没什么经验,呵呵,又有点囫囵吞枣了。


       补充:

       mutable int a;
       代表一个类的常成员函数,例如,void GetSomething() const; 可以修改该成员。
       void GetSomething() const
       {
             a = 0;
        }
       如果不加mutable,编译失败。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值