概念

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。

注意

一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。(简单点就是该程序代码不能试图去修改它,但不排除硬件方面修改了它,我们每次都得重新读取它的值。)

几个应用例子

  1. 并行设备的硬件寄存器(如:状态寄存器)。
  2. 一个中断服务子程序中会访问到的非自动变量。(个人理解:中断服务子程序不能用缓存在寄存器中的值来判断事件,因为那个值可能被修改了,需要重新读取。所以一般需要把这种变量声明为volatile。)
  3. 多线程应用中被几个任务共享的变量。

C/C++ volite关键字相关推荐

  1. java锁以及双重检查

    双检锁/双重校验锁 双层对空判断困扰了很久.实例 public class Singleton {private volatile static Singleton singleton;//私有构造函 ...

  2. 35岁以后的Android程序员出路在哪里?最强技术实现

    我究竟要不要学习Kotlin呢? 要回答这个问题,我们先把时间拨回到2017年5月18日,安卓团队在谷歌 I/O 2017 大会上宣布 Kotlin 成为官方头等支持语言. 彼时谷歌技术大牛 Stev ...

  3. 江浙沪的java春招实习综合面经

    最近也是每天刷牛客看了很多大家的帖子,自己结束春招,把之前的记录分享给大家把. 投递公司 搜狐焦点 爱奇艺散招,快手,金陵科技, 地平线, 有赞,YuxiSoft,搜狐,科大讯飞,腾讯微信,趋势,酷家 ...

  4. Volatile的优缺点

    3.Volatile的优缺点 有点:Volitile修饰的成员变量在每次被线程访问是,都强迫从共享内存中重读成员变量的值:当成员变量发生变化是,强迫线程将变化值回写到共享内存:这样可以让多个线程总是看 ...

  5. flutter全屏时钟!GitHub标星1w的安卓架构师必备技能,含BATJM大厂

    前言 说起程序员人们的第一印象就是工资高.加班凶.话少钱多头发少.再加上现在科技互联网公司太吃香,bat.华为小米等公司程序员加班情况被广泛传播,程序员用生命在敲代码的印象刻在了很多人的心里. 与其它 ...

  6. Java并发——Synchronized和Volatile

    Java并发同步机制 一.Synchronized 1>实现方式及原理 它的使用方法有以下三种 同步普通方法,锁当前实例对象(对这个类的对象操作需要获取锁) 同步静态方法,锁当前Class对象( ...

  7. 进程线程IO复用技术

    进程&&线程&&IO复用技术 进程 进程间通讯方式 1.匿名管道 2.有名管道 3.内存映射(共享内存) 4.消息队列 5.信号量 6.套接字 7.信号 线程 线程同步 ...

  8. 安卓开发权威指南!含泪狂刷Android基础面试118题,聪明人已经收藏了!

    前言 这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的题目. 熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率. 欢迎一线公司员工以及网友提交 ...

  9. 网易社招面经,纯干货分享

    个人背景 本人毕业于二流一本大学非计算机相关专业,大三下学期开始学java.目前刚好工作两年,专业后端,base深圳. 面试流程 一面二面电话面-->三面四面视频面-->主管电话面--&g ...

最新文章

  1. LeetCode实战:除自身以外数组的乘积
  2. 介绍下JSP如何进行自动刷新
  3. All input tensors must be on the same device
  4. 13.执行外部命令subprocess
  5. 参数无效_Shell 脚本启动如何传递参数
  6. oracle原始数据类型,Oracle基本数据类型存储格式浅析——RAW类型
  7. (学)咱们换一种说法!
  8. html公共模块提取出去,webpack 填坑之路--提取独立文件(模块)
  9. hadoop学习笔记:运行wordcount对文件字符串进行统计案例
  10. dbms_job涉及到的知识点
  11. 语音对话系统的设计要点与多轮对话的重要性
  12. 怎么给没链接的flash加超链接
  13. 4.5亿!依图的AI芯片计划初步浮出水面
  14. Win10重装系统后如何合并分区?
  15. dede WAP 版 限制标题title的字数的方法
  16. javascript html coffee 编辑器,CoffeeCup HTML Editor (html编辑器)
  17. Unreal Engine 4 Radiant UI 入门教程(一)制作Radiant HUD
  18. C语言打印某一年的日历 (2*6格式)
  19. keil出现no source“: Error: command-line: #564: cannot open解决方法
  20. linux 虚拟光驱软件,Ubuntu Linux下强大的虚拟光驱软件 :AcetoneISO

热门文章

  1. R语言使用原生包(基础导入包、graphics)中的plot函数可视化散点图(scatter plot)
  2. 导入jQuery:在线导入
  3. linux基本命令打开文件,Linux基本命令 (二)
  4. 想知道照片变漫画怎么弄?学会这两招就能玩转图片
  5. Mac 下安装pip3 亲测有效转发一下
  6. 清远2020年大数据相关产业产值超过200亿
  7. React全家桶(技术栈)
  8. opengl绘制位图字体c语言源代码,SFML中的位图字体(OpenGL)
  9. ipad iphone源地址
  10. FFmpeg基础知识音频篇(二)