linux(信号结尾)

news/2024/10/22 13:36:31/

目录:

            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信号默认动作是忽略的!!!

 

如果我父进程不想回收子进程(换而言之就是我不想让子进程产生僵尸状态)呢??

 


http://www.ppmy.cn/news/313308.html

相关文章

Android滴滴路由框架DRouter原理解析

作者:linversion 前言 最近的一个新项目使用了Clean Architecture模块化MVVM架构,将首页每个tab对应的功能都放到单独的模块且不相互依赖,这时就有了模块间页面跳转的问题,经过一番研究选择了滴滴的DRouter,因为其出色…

友华PT925E,电信天翼网关3.0,光猫超级密码获取最简便方式

第一步:核实是否为电信天翼网关3.0,如清楚,请直接跳至第三步 浏览器登录http://192.168.1.1/ 登录后应为下图第二步:使用useradmin账号 和光猫背后的密码登录后,界面显示为下图,即为电信天翼网关3.0 第三…

南天PR2 PR2E PR9 中航 PR-b PR-V PR-C PR-t PR-u PR-d GWI PR2 plus 打印机驱动安装视频教程

南天打印机 电脑驱动安装教程视频 ​ 驱动下载协助安装 打印机驱动:支持所有PR系列打印机 南天Nantian: PR2 PR2E PR9 PR2 plus 中航 : PR-b PR-V PR-C PR-t PR-u PR-d 长城GWI :PR2 plus PR 70 XP/WIN7/WIN8/WIN10 32 64位 等系统打印机驱…

天玑9000+和天玑9000有哪些区别 两者参数对比

天玑9000在今日正式发布了,而作为天玑9000的超频版,在性能上也有所提升,但如果和原版对比,天玑9000和天玑9000有哪些区别?下面来看看两者的参数对比吧。 天玑9000和天玑9000有哪些区别 两者参数对比 6 月 22 日消息&#xff0c…

Autonics PR18-8DN

上升/太阳狮子座 本周(3.15-3.21)狮子座人格魅力大爆发,你们能在工作中获得异性的认可和支持,特别是生活中需要别人支持的时候,总是能如你们所愿。而由于本周会处于忙碌的状态,所以工作压力还是…

巨杉数据库5.0携手南天信息布局云业务

云时代为国产数据库打开了一个全新的思路,上云导致了数据库市场正发生着显著的变化。巨杉数据库最新发布的SequoiaDB v5.0版本,在原生分布式引擎的基础上,拓展多云多平台开放架构。巨杉数据库SequoiaDB多云多平台的运行能力,可以实…

不止是替代 看南天信息与浪潮的金融国产化实践

金融,作为关系国计民生的重要行业,其动态总是引起人们的高度关注。自从国家提出信息技术安全可控战略之后,银行等金融行业内部掀起了一系列的讨论和变革。 众所周知,银行业应用的信息技术产品大多被国外厂商垄断,从硬件…

Jetson AGX Orin 刷机采坑全过程

参考: Nvidia Jetson AGX Orin 初体验Jetson AGX Orin 开发工具包入门NVIDIA Jetson 开发工具包快速开始 公司新买回来Orin,通电连上屏幕没有显示,按照以往经验只能通过刷机解决: 4. 下载sdkmanager,只有 NVIDIA SDK Manager 1.8 版本才可以…