volatile的使用

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

       作用

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


       补充:

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


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
volatile关键字主要用于确保多线程环境下共享变量的可见性和禁止指令重排序。当一个变量volatile修饰时,每次访问该变量时都会从内存中读取最新的值,而不是使用寄存器中的备份。这样可以避免多线程环境下的数据不一致性问题。 使用volatile关键字的场景包括: 1. 多线程环境下的共享变量:当多个线程同时访问一个共享变量时,使用volatile关键字可以确保每个线程都能看到最新的值,避免数据不一致的问题。 2. 硬件寄存器的访问:在嵌入式开发中,对硬件寄存器的访问通常需要使用volatile修饰指针,以确保每次访问都能从内存中读取最新的值。 需要注意的是,volatile关键字无法保证操作的原子性,因此在需要保证原子性的操作时,仍然需要使用synchronized关键字或其他线程安全的机制。此外,使用volatile关键字也需要满足一定的条件,比如对变量的写操作不依赖于当前值,且该变量没有包含在具有其他变量的不变式中。 #### 引用[.reference_title] - *1* [volatile的用法](https://blog.csdn.net/qq_31452291/article/details/119239182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【002 关键字】一文彻底搞懂volatile用法](https://blog.csdn.net/qq_41709234/article/details/123028868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值