linux(信号结尾)
目录:
1.可重入函数
2.volatile关键字
3.SIGCHLD信号
--------------------------------------------------------------------------------------------------------------------------------
1.可重入函数----------用来描述一个函数的特点的
1.在单进程当中也存在多执行流的情况
实际上,当我们正常正在执行我们的进程代码逻辑时,因为我们的系统调用、时间片到了,等等可能的因素,导致我们由用户态的身份转为内核态的身份,当我从内核返回用户态时,我要做信号检测,检测时,我就可能执行信号捕捉,当我执行信号捕捉时,它可能进入到了另一种执行流,那么我返过来说,我进程的生命执行流当中,没有收到过任何信号,就说明我信号捕捉函数不会被调用,换言之我可能只执行我main函数的代码,也可能因为我收到信号时,我进程跑过去执行信号捕捉流程的代码-----------所以在单进程当中也存在多执行流的情况(两个执行流是毫不相关的)
第一步:
第二步: 我去处理我信号,我信号捕捉函数里也进行了insert,我在signohandler方法里也插入我node2 ...............
最后我们这样子就会导致一个小问题 :
一旦我head执行node2,现在我用node‘1的动地址去覆盖head,此时我们对应的node’2节点就找不到了,节点丢失
导致上面的问题原因很简单就是当我一个主执行流,正在执行我insert,插入的时候,突然因为信号的到来,导致我们进入信号捕捉执行流了,在捕捉函数里我insert被调用了
这种现象我们成为 insert函数被重复进入了
insert函数一旦重入,有可能出现问题 --- 该函数不可被重入
insert函数一旦重入,不会出现问题 ---- 该函数可重入函数
-----------------------------------------------------------------------------------------------------------------------------
2.volatile关键字
可是在我们的认识当中,我们需要介绍一个非常重要的概念!!!
我们上面的编译器是属于非常常规的情况,我们刚刚看到的现象是没问题的
但是我们的编译器是可以优化我们程序的---我们是可以自己设定编译器的优化级别的(gcc当中是有 大O0 到 大O4 这个优化级别的)
意味着flag的值永远是0,怎么理解的呢??
一般这个flag是全局变量,是变量,在进程运行时就应该在内存开辟空间,换句话说,CPU要识别flag就必须从内存里读flag,读到CPU内,在CPU内做判断,判断完之后,在继续从内存拿flag读到CPU内做判断,不断循环的过程,这样不断的检测flag的值
但是在编译器发现在main函数当中没有人对flag做修改,直接对你的flag优化到CPU寄存器当中,此时不在对你的内存做访问了,直接识别你的CPU寄存器相关的信息
怎么去解决这个问题呢??
-----------------------------------------------------------------------------------------------------------------------------
这是我们main的执行流认为
但是我们收到信号,执行信号捕捉的时候,它内部修改了flag,但是它内存修改的flag并不是CPU上的flag,而是内存当中flag,我main函数的执行流又不从内存当中读你的flag了,而是直接用CPU当中寄存器存的那个flag
volatile作用:告诉编译器,不要对我这个变量做任何优化,读取必须贯穿式读取内存,不要读取中间缓冲区寄存区中的。(保持内存的可见性)
3.SIGCHLD信号
子进程退出不是悄悄摸摸的退出了,而是子进程退出的时候,会向父进程发送SIGCHID信号
父进程对SIGCHID信号默认动作是忽略的!!!
如果我父进程不想回收子进程(换而言之就是我不想让子进程产生僵尸状态)呢??
相关文章:

linux(信号结尾)
目录: 1.可重入函数 2.volatile关键字 3.SIGCHLD信号 -------------------------------------------------------------------------------------------------------------------------------- 1.可重入函数----------用来描述一个函数的特点的 1.在单进程当中也存…...

【漏洞修复】node-exporter被检测出来pprof调试信息泄露漏洞
node-exporter被检测出来pprof调试信息泄露漏洞 说在前面解决方法结语 说在前面 惯例开篇吐槽,有些二五仔习惯搞点自研的安全扫描工具,然后加点DIY元素,他也不管扫的准不准,就要给你报个高中危的漏洞,然后就要去修复&…...
在linux 上安装 NFS服务器软件
在 Ubuntu Linux 中创建 NFS 文件系统通常需要完成以下步骤: 安装 NFS 服务器软件。您可以在终端上使用以下命令来安装所需的软件包。sudo apt-get update sudo apt-get install nfs-kernel-server创建要共享的目录。例如,您可以创建一个名为 /var/nfs/shared 的目录。sudo m…...

网卡中的Ring buffer -- 解决 rx_resource_errors 丢包
1、软硬件环境 硬件: 飞腾E2000Q 平台 软件: linux 4.19.246 2、问题现象 网卡在高速收包的过程中,出现 rx error , 细查是 rx_resource_errors 如下: rootE2000-Ubuntu:~# ifconfig eth1 eth1: flags4163<UP,BROADCAST,RU…...
六月九号补题日记:Codeforces Round 877 (Div. 2)
专注是不够的,很重要的一方面在于细节,关注细节:精细和专注才是成功的重点!!! A 题意:给你一堆数字,说这一堆数字是由最初的两个数字相减得到的,让你求出两个数字其中一…...
python基础选择题,高中适用
1. 下面哪个是 Python 的注释符号? A. // B. # C. /* D. ; 答案:B 2. 下面哪个是 Python 的赋值运算符? A. B. C. ! D. > 答案:A 3. 下面哪个是 Python 的逻辑运算符? A. && B. || C. ! D. & 答…...

Linux 面试题-(腾讯,百度,美团,滴滴)
Linux 面试题-(腾讯,百度,美团,滴滴) 分析日志t.log(访问量),将各个ip 地址截取,并统计出现次数,并按从大到小排序(腾讯) http://192.168.200.10/index1.html http://192.168.200.10/index2.html http://192.168.200.20/index1.html http://192.168.20…...
DDD--战略设计步骤
在领域驱动设计(Domain-Driven Design,DDD)中,战略设计是指在系统的整体层面上考虑领域模型的组织和架构。下面是一些战略设计的详细步骤: 确定限界上下文(Bounded Context):首先&a…...

Web Scoket简述
Web Socket 简介 初次接触 Web Socket 的人,我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。http基于请求响应实现。 (准确来说HTTP…...
“Docker 技术在企业中的应用及挑战解决方案“
Docker 技术是一种基于容器化的应用部署和管理技术。随着云计算的普及和应用的不断增多,Docker 技术在企业中的应用越来越广泛。本文将介绍 Docker 技术的基本概念、优势和应用场景,并讨论如何在企业中应用 Docker 技术。 一、Docker 技术概述 Docker …...

vue中开发包、生产包、全局包的区别以及安装语法
目录 开发包 (devDependencies) 安装方法 生产包 (dependencies) 安装方法 全局包 (Global build) 安装方法 vue中有三种不同类型的包:开发包 (Development build),生产包 (Production build) 和全局包 (Global build)。下面我们分别解释它们的区别…...

list的模拟实现
前言 list是STL中重要的容器,了解它的原理对于我们掌握它是有很多的帮助的,一般list和vector都是一起来使用的,因为它们的优缺点不同,刚好可以互补。list的优点是任意位置的插入和删除都很快,它的缺点是不支持随机访问…...

ChatGLM简介和SSE聊天接口测试效果
开发公司 智谱AI是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B,并构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎,基于此模型…...

darknet yolo标注、训练详细说明
文章目录 1、标注数据1.1、标注1.2、生成训练列表文件train.txt1.3、转换数据标注格式 2、训练数据整理2.1、修改train.txt路径2.2、修改yolov3.cfg2.3、obj.name和obj.data2.4、训练脚本文件trian.sh2.5、测试脚本文件test.sh 3、训练 本文对应的脚本文件和程序下载链接 darke…...

chatgpt赋能python:Python如何产生随机整数?
Python如何产生随机整数? Python是一种高级编程语言。它允许程序员轻松地创建各种类型的应用程序,包括生成随机整数。本文将介绍如何在Python中使用内置的随机数函数来生成随机整数。 random模块 Python中的random模块提供了生成随机数的函数。这些函…...

大话Stable-Diffusion-Webui-客制化主题(四)
文章目录 目标效果开始重要说明单选框以及复选框图标样式更改gradio主题构建器上传主题方式代码上传主题方式目标 在DIY的主题中更改gradio单选框组件以及复选框组件的勾选后图标样式 效果 开始 笔者在使用gradio的主题构建器的过程中发现,gradio的复选框以及单选框组件勾选…...

Excel函数VLOOKUP常用方法
一、基础用法 1、精确匹配 公式:VLOOKUP(待匹配值,查找范围,范围列数,查找方式) 定义好要输出表的表头和第一列,第一列即为要查找和匹配的父内容,在第二列输入公式,被查找表中一定也要将待查…...

systemV的工作原理+原理代码
概念 我们知道进程间的通信有管道的方式进程通信管道制作_云的小站的博客-CSDN博客 但是我们的管道通信其实属于一种取巧的方式,利用了打开的文件可读写的特性上,两个进程对此分别进行读写操作就会产生所谓的通信现象,但是外面的管道依旧得…...
Kubeflow--TFJob实现机制学习
2023暑期学习 TF Job实际场景应用Vertex AI TF Job 链接 https://www.kubeflow.org/docs/components/training/tftraining/ https://developer.aliyun.com/article/601779 TFJob实际上遵循Kubernetes标准的API定义. TFJob 对象 apiVersion --> string --> api版本&…...

百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性
摘要 尽管mRNA疫苗已用于COVID-19的预防,但仍然面临不稳定和易降解的风险,这是mRNA疫苗存储、配送、效价等面临的重要障碍。先前的研究已表明,增加二级结构可延长mRNA的半衰期,再加上选择优化的密码子,可改善蛋白表达。…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...