当前位置: 首页 > news >正文

c语言中的volatile(从系统层面看)

gcc的优化级别。

mysignal:mysignal.cgcc -o $@ $^ -O3
.PHONY:clean
clean:rm -f mysignal
#include<stdio.h>
#include<signal.h>int quit=0;
void handler(int signo)
{printf("%d 号信号,正在被捕捉!!!\n",signo);printf("quit: %d",quit);quit=1;printf(" -> %d\n",quit);
}
int main()
{signal(2,handler);while(!quit);printf("正常退出!!!\n");return 0;
}

[lzy@centos mysignal]$ make
gcc -o mysignal mysignal.c -O3
[lzy@centos mysignal]$ ./mysignal
^C2 号信号,正在被捕捉!!!
quit: 0 -> 1
^\Quit (core dumped)
[lzy@centos mysignal]$ ./mysignal
^C2 号信号,正在被捕捉!!!
quit: 0 -> 1
^\Quit (core dumped)
[lzy@centos mysignal]$ 

signal(2,handler);//quit值没有发生改变,将quit的值优化到了寄存器中//寄存器中只保存临时数据while(!quit);//故寄存器中quit为0printf("正常退出!!!\n");
//volatile 保持内存可见性
volatile int quit=0;

防止寄存器中的值覆盖内存中的某个变量。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机网络408考研 2019
  • python:“ func“和“ func()“的区别
  • 用Python打造精彩动画与视频,9.3 项目案例分享与反思
  • 寻参算法之狼群算法
  • k8s持久化存储PV和PVC
  • 【JVM篇】自动内存管理——HotSpot虚拟机对象探秘
  • 【zlm】针对单个设备的音频的编码的设置
  • 【通用的Python爬虫示例】
  • 从EN标准到REACH法规:全面掌握CE认证洗涤剂的安全要求
  • Redis系列之Redis Cluster
  • EasyCVR视频转码:T3视频平台不支持GB28181协议,应该如何实现与视频联网平台的对接与视频共享呢?
  • Spring IOC 注入的3种方式
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • 如何理解openfoam案例里面的blockMesh文件里面的simpleGrading
  • leetcode 3.无重复字符的最长子串
  • [笔记] php常见简单功能及函数
  • [译]Python中的类属性与实例属性的区别
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 2017前端实习生面试总结
  • CAP 一致性协议及应用解析
  • GitUp, 你不可错过的秀外慧中的git工具
  • IP路由与转发
  • js
  • Spring Cloud Feign的两种使用姿势
  • Spring声明式事务管理之一:五大属性分析
  • 给Prometheus造假数据的方法
  • 构建工具 - 收藏集 - 掘金
  • 聊聊flink的TableFactory
  • 聊聊sentinel的DegradeSlot
  • 如何合理的规划jvm性能调优
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 正则表达式小结
  • 【干货分享】dos命令大全
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #pragma once
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)Hilt的基本概念和使用
  • (7)摄像机和云台
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (windows2012共享文件夹和防火墙设置
  • (动态规划)5. 最长回文子串 java解决
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转载)Linux 多线程条件变量同步
  • ****Linux下Mysql的安装和配置
  • .NET Micro Framework初体验