【C】volatile 关键字

news2024/9/28 19:24:08

目录

    • volatile
      • 1)基本概念
      • 2)用途:禁止编译器优化
      • 3)总结

volatile

1)基本概念

const是C语言的一个关键字。

const用于告诉编译器相应的变量可能会在程序的控制之外被修改,因此编译器不应该对其进行优化。

声明语法:

volatile int A;

作用:

  • 防止编译器优化,确保对变量的每次访问都是实际的读写操作,而不是使用缓存中的值。
  • 用于表示可能会被异步修改的变量,如硬件寄存器、中断服务程序中的共享变量等。

2)用途:禁止编译器优化

在学习这个知识点前,需要大概了解下代码运行的实质

对于一个简单的乘法运算a = a * b

在RISC中要使用4条汇编指令:

① 读内存中的a

② 读内存中的b

③ 在CPU中计算a*b

④ 把结果写回内存

img

问题:正常流程是上面的四步,但是,编译器可能会对变量的读写进行优化,例如将变量A缓存在CPU自己的寄存器中,下次使用的时候直接读CPU寄存器中的A,而不去读内存中的A,但内存中的A可能已经发生了变化,这样可能导致无法正确地捕捉到变量的实际变化。

为了解决这种问题,用volatile 去修饰Avolatile int A; 就可以禁止编译器优化,确保对变量的每次访问都是实际的读写操作。

这种BUG一般发生在多线程环境中,全局变量等共享量,没有管理好。

3)总结

volatile 的使用需要谨慎,特别是在多线程编程中,建议使用专门设计用于同步的机制来保障正确性。

volatile 不能替代更强大的同步手段,如互斥锁、原子操作等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1379386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac 使用brew卸载node

1.查看当前的node版本 node -v 2.查看使用brew 安装的版本,可以看到本机装了14、16、18版本的node brew search node 3.卸载node brew uninstall node版本号 --force 如分别删除14、16、18版本的node命令如下 brew uninstall node14 --force brew uninstall no…

【排序篇1】插入排序、希尔排序

目录 一、插入排序二、希尔排序 一、插入排序 思路: 插入排序就像玩扑克牌,抽出一张牌作为比较的元素,与前面的牌依次进行比较,小于继续往前比较,大于等于停下插入到当前位置。 图示: void InsertSort(…

高效便捷的远程管理利器——Royal TSX for Mac软件介绍

Royal TSX for Mac是一款功能强大、操作便捷的远程管理软件。无论是远程桌面、SSH、VNC、Telnet还是FTP,用户都可以通过Royal TSX轻松地远程连接和管理各种服务器、计算机和网络设备。 Royal TSX for Mac提供了直观的界面和丰富的功能,让用户能够快速便…

RT-Thread I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O(Input/Output,输入/输出)设备,例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡,以及网络设备的以太网接口等,都…

openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态

文章目录 openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态195.1 分析查询语句运行状态195.1.1 问题现象195.1.2 处理办法 openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态 195.1 分析查询语句运行状态…

池化、线性、激活函数层

一、池化层 池化运算是深度学习中常用的一种操作,它可以对输入的特征图进行降采样,从而减少特征图的尺寸和参数数量。 池化运算的主要目的是通过“收集”和“总结”输入特征图的信息来提取出主要特征,并且减少对细节的敏感性。在池化运算中…

可盐可甜的红色马甲背心

膨体棉腈面料不易皱,搭配阿兰花菱形镂空设计 真的绝绝子,红色吸睛又美观 随便搭配一件衬衫去穿,自带文艺气息 氛围感直接拉满 出街拍照很出片,时髦又气质 女孩子的甜美,温柔等都可以突显 有喜欢的可以尝试一下哟…

... * Images are published to: /custom_ns/custom_camera/custo ...

using yaml rules: yaml.safe_load() failed mapping values are not allowed herein "<unicode string>", line 205, column 42:... * Images are published to: /custom_ns/custom_camera/custo ... 说出来有点不信&#xff0c;居然是这个注释可能不安…

关于达梦DMHS实时同步工具开启预提交参数后导致同步日志报错问题的分析

【问题现象】 DMHS日志报错,影响行数与期望行数不同 【报错原因】 数据库提交操作比较耗时,为加快同步速度,当两个事务操作的数据没有交集(事务之间没有关联的表)时,两个事务可以并行执行,并行执行的事务提交时,并不受事务提交先后顺序的限制,有可能后提交的…

【目标检测】YOLOv5算法实现(七):模型训练

本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github&#xff0c;删减了源码中部分内容&#xff0c;满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现&#xff0c;后续修改、增加相关模…

随机过程——卡尔曼滤波学习笔记

一、均方预测和随机序列分解 考虑随机序列 使用预测 定义 称为的均方可预测部分。 若相互独立&#xff0c;则是均方不可预测的。 定义随机序列的新息序列 V(k)基于样本观测的条件均值为0&#xff0c;即均方不可预测。 V(k)与是正交的&#xff0c;即。 二、卡尔曼滤波 …

2024-01-11 部署Stable Diffusion遇挫记

点击 <C 语言编程核心突破> 快速C语言入门 部署Stable Diffusion遇挫记 前言一、一如既往的GitHub部署二、使用的感受总结 create by Stable Diffusion; prompt: fire water llama 前言 要解决问题: 由于近期的努力, 已经实现语音转文字模型, 通用chat迷你大模型的本地…

JVM基础(11)——G1垃圾回收器

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

一文了解2024年AMC8竞赛模拟考试安排的重点和注意事项(附资源)

各位报名参加2024年AMC8竞赛的家长和孩子们注意了&#xff01;今天到明天就可以参加AMC8竞赛的模拟考试了&#xff0c;本文结合本次模拟考试的常见问题为大家进行了梳理&#xff0c;站在参赛者的角度把2024年AMC8的模拟考试的关键事项和要点说清楚&#xff0c;让您最准确、快速…

大模型日报-20240113

击败 8 名人类规划师&#xff1a;清华团队提出强化学习的城市空间规划模型 https://mp.weixin.qq.com/s/GkL5peKCOJLh4pLjiTeIFw 近年来&#xff0c;以更加宜居为导向&#xff0c;「15 分钟城市」概念得到了更多关注&#xff0c;其核心是居民在 15 分钟内可步行或骑行到基本服…

88.乐理基础-记号篇-反复记号(二)D.C.、D.S.、Fine、Coda

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;87.乐理基础-记号篇-反复记号&#xff08;一&#xff09;反复、跳房子-CSDN博客 下图红色左括号框起来的东西&#xff0c;它们都相对比较抽象一点&#xff0c;这几个词都是意大利语 首先D.C.这个标记&#xff0c;然…

win11更改桌面默认存储路径

打开文件资源管理器 右击桌面点击属性 在属性中找到位置选项卡&#xff0c;在里面有一个移动&#xff0c;点击它选择你想要的位置 选好位置后点击应用&#xff0c;随后会出现一个进度条&#xff0c;跑完后点击确认 到这里就完成了桌面默认位置的转移

Pandas实战100例-专栏介绍

Pandas&#xff0c;Python数据科学的心脏&#xff0c;是探索和分析数据世界的强大工具。想象一下&#xff0c;用几行代码就能洞察庞大数据集的秘密&#xff0c;无论是金融市场趋势还是社交媒体动态。 通过Pandas&#xff0c;你可以轻松地整理、清洗、转换数据&#xff0c;将杂…

Python 全栈体系【四阶】(十二)

第四章 机器学习 十五、朴素贝叶斯 朴素贝叶斯是一组功能强大且易于训练的分类器&#xff0c;它使用贝叶斯定理来确定给定一组条件的结果的概率&#xff0c;“朴素”的含义是指所给定的条件都能独立存在和发生。朴素贝叶斯是多用途分类器&#xff0c;能在很多不同的情景下找到…

WSL不同版本的Ubuntu更换清华镜像,加速Ubuntu软件下载速度

文章目录 不同版本的Ubuntu使用清华镜像&#xff0c;加速Ubuntu软件下载速度1. 备份源软件配置文件2. 复制镜像源3. 修改软件源配置文件4. 更新软件包列表&#xff0c;升级软件包等内容5. 从仓库中下载其它软件可能存在的问题 不同版本的Ubuntu使用清华镜像&#xff0c;加速Ubu…