LIUNX系统编程:可重入函数volatile

目录

1.概念

2.volatile关键字


1.概念

在执行流执行到mian函数,insert函数中的1号位置的时候,突然就陷入内核,处理信号,执行信号自定义方法,这个方法调用的也是insert,执行完之后,导致了n2的节点丢失,那么这个函数就叫不可重入函数,如果在执行流重复进入的情况下不会出问题的就叫,可重入函数。

2.volatile关键字

概念:

这个关键字主要就是防止编译器的优化,保持内存的可见性。

#include <stdio.h>
#include <signal.h>
int flag = 0;

void handler(int signo)
{
    flag = 1;
    printf("flag change %d\n", flag);
}


int main()
{
    signal(2, handler);
    while (!flag);
    printf("eixt\n");
    return 0;
}

这段代码,首先自定义捕捉了2号信号,然后让其阻塞到while循环这,直到flag变为1退出。

没啥问题吧,但是如果编译器开启优化呢?

gcc默认优化是 -O0 ,就是不优化,还有-O1,-O2,分别对应着不同优化等级。

使用-O1编译一下。

我们发现已经终止不了,这是因为编译器看我们的main函数中没有对flag的修改,直接就把flag放到寄存器中了,省着还要和内存交互,但是我们对内存的flag修改,并不会影响寄存器。

我们使用volatile关键字修饰flag,flag就不会被放到寄存器中。

优化即使开到最大也不会有问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音视频文件格式转换神器(常用JPG、PNG、MP4、MP3转换等)

一、简介 1、一款完全免费、无广告且开源的格式转换工具&#xff0c;支持超过200种文件格式的转换。它能够处理视频、音频、图像、文档、电子书等多种类型的文件&#xff0c;功能非常强大。该软件由GitHub上的一位开发者发布&#xff0c;目的是为了让用户能够轻松地完成文件转换…

C++升级软件时删除老版本软件的桌面快捷方式(附源码)

删除桌面快捷方式其实是删除桌面上的快捷方式文件,那我们如何去删除桌面快捷方式文件呢?软件可能已经发布过多个版本,其中的一些版本的快捷方式文件名称可能做了多次改动,程序中不可能记录每个版本的快捷方式名称,没法直接去删除快捷方式文件。本文就给出一种有效的处理办…

25.入口点注入

钩子注入是利用SetWindowsHookEx函数这是一个被动的注入方式&#xff0c;入口点注入是一个主动注入&#xff0c;就是做这件事什么都不为就是为了注入&#xff0c;入口点注入有很多优势比如说做一个游戏的多开器&#xff0c;多开的检测事情是在游戏一启动的时候完成的&#xff0…

流程控制基本概念

流程控制基本概念 默认情况下程序运行后&#xff0c;系统会按书写顺序从上至下依次执行程序中的每一行代码。但是这并不能满足我们所有的开发需求, 为了方便我们控制程序的运行流程&#xff0c;C语言提供3种流程控制结构&#xff0c;不同的流程控制结构可以实现不同的运行流程…

Meta Llama 3 前馈层

Meta Llama 3 前馈层 flyfish 图片来自论文 http://arxiv.org/pdf/2304.13712 因为树根是Transformer&#xff0c;所以这里会将 Llama 3 与Transformer比较下 Transformer的前馈层 在Transformer模型中&#xff0c;每个编码器和解码器层中都包含一个前馈神经网络&#xff0…

MySQL-子查询(DQL 结束)

054-where后面使用子查询 什么是子查询 select语句中嵌套select语句就叫做子查询。select语句可以嵌套在哪里&#xff1f; where后面、from后面、select后面都是可以的。 select ..(select).. from ..(select).. where ..(select)..where后面使用子查询 案例&#xff1a;找…

C++中stack和queue

前言 在 C 中&#xff0c;stack&#xff08;栈&#xff09;和 queue&#xff08;队列&#xff09;是两种常用的容器适配器&#xff0c;分别用于管理数据的后进先出&#xff08;LIFO&#xff09;和先进先出&#xff08;FIFO&#xff09;访问模式。本文将详细介绍这两种数据结构的…

C#开源软件:OneNote组件oneMore轻松打造自己的公众号编辑器

OneMore是一款为Microsoft OneNote设计的插件&#xff0c;它提供了许多扩展功能来增强OneNote的使用体验。 插件功能概述&#xff1a; OneMore插件拥有多达一百多个扩展功能&#xff0c;这些功能覆盖了笔记编辑、搜索、导出等多个方面&#xff0c;为用户提供了更加便捷和高效的…

【项目实战】--云备份系统

1、云备份认识 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中。并且能够随时通过浏览器进行查看并且下载&#xff0c;其中下载过程支持断点续传功能&#xff0c;而服务器也会对上传为文件进行热点管理&#xff0c;将非热点文件进行压缩存储&#xff0c;节省…

openGauss 6.0.0 一主二备集群安装及使用zcbus实现Oracle到openGauss的数据同步

一、前言 openGauss 6.0.0-RC1是openGauss 2024年3月发布的创新版本&#xff0c;该版本生命周期为0.5年。根据openGauss官网介绍&#xff0c;6.0.0-RC1与之前的版本特性功能保持兼容,另外&#xff0c;在和之前版本兼容的基础上增加了很多新功能&#xff0c;比如分区表性能优化…

Java集合自测题

文章目录 一、说说 List , Set , Map 三者的区别&#xff1f;二、List , Set , Map 在 Java 中分别由哪些对应的实现类&#xff1f;底层的数据结构&#xff1f;三、有哪些集合是线程不安全的&#xff1f;怎么解决呢&#xff1f;四、HashMap 查询&#xff0c;删除的时间复杂度五…

autosleep框架设计与实现

在低功耗系统中&#xff0c;autosleep是一个较小的模块&#xff0c;是低功耗主流程的入口。在Linux内核中&#xff0c;autosleep是休眠流程的触发点和入口点&#xff0c;PM Core的休眠流程入口pm_suspend()就是被autosleep的睡眠工作队列调用而进入休眠的。 该功能的支持受宏…

MyBatis 参数上的处理的细节内容

1. MyBatis 参数上的处理的细节内容 文章目录 1. MyBatis 参数上的处理的细节内容2. MyBatis 参数上的处理3. 准备工作4. 单个(一个)参数4.1 单个(一个)简单类型作为参数4.2 单个(一个) Map集合 作为参数4.3 单个(一个) 实体类POJO作为参数 5. 多个参数5.1 Param注解(命名参数)…

计算机相关专业的探讨

目录 一、计算机相关专业是否仍是“万金油”选择 二、计算机行业的未来发展态势 三、从专业与个人的匹配度判断选择计算机相关专业 四、对于高考生的建议 一、计算机相关专业是否仍是“万金油”选择 计算机相关专业在过去很长一段时间内确实被视为“万金油”专业&#xff0…

算法训练营day06--242.有效的字母异位词+349. 两个数组的交集+202. 快乐数+1. 两数之和

一、242.有效的字母异位词 题目链接&#xff1a;https://leetcode.cn/problems/valid-anagram/description/ 文章讲解&#xff1a;https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html 视频讲解&#xff1a;http…

电视剧推荐

1、《春色寄情人》 2、《唐朝诡事录》 3、《南来北往》 4、《与凤行》 5、《利剑玫瑰》 6、《承欢记》

【教程】使用立创EDA打开JSON格式的PCB及原理图

这里写目录标题 一、将PCB和原理图放同一文件夹二、打开嘉立创EDA并导入.zip文件三、选择.zip文件并选择 “导入文件并提取库” 一、将PCB和原理图放同一文件夹 并打包成.zip文件 二、打开嘉立创EDA并导入.zip文件 嘉立创 我这里用的网页端&#xff0c;客户端下载页面拉到…

html的网页制作代码分享

<!-- prj_8_2.html --> <!DOCTYPE html> <html lang "EN"><head><meta charset"utf-8" /><title>页面布局设计</title><style type "text/css">*{padding: 0px;margin:0px;}#header{back…

Spring中IOC容器

IoC IOC容器 IoC是一种设计思想&#xff0c;面向对象编程 Spring通过IoC管理所有Java对象的实例化和初始化&#xff0c;控制对象之间依赖关系 将IoC容器管理的Java对象称为Spring Bean&#xff0c;与new创建的对象没有区别 控制反转&#xff08;IoC Inversion of Controle&a…

世优科技AI数字人多模态交互系统“世优波塔”正式发布

2024年6月6日&#xff0c;世优科技“波塔发布会”在北京举办&#xff0c;本次发布会上&#xff0c;世优科技以全新的“波塔”产品诠释了更高效、更智能、更全面的AI数字人产品及软硬件全场景解决方案&#xff0c;实现了世优品牌、产品和价值的全面跃迁。来自行业协会、数字产业…