linux操作系统之全局异步IO及可重入/不可重入函数

(1)全局变量异步I/O实现父子进程交替数数

          1)信号捕捉函数

                           

            2)main函数实现信号交替

                       

                   3)程序实现

                           1》创建子进程,父进程等待1s,等待子进程完成捕捉函数注册(捕捉信号SIGUSR1)。父进程注册捕捉函数(捕捉信号SIGUSR2),父进程先执行一次捕捉函数,将标志位flag置1,等待1s;

                           2》flag为1时,父进程完成数数,父进程给子进程发送SIGUSR1信号,并将flag置0;

                           3》子进程捕捉函数捕捉到SIGUSR1信号,执行捕捉函数,令flag为1,等待1s。子进程向父进程发送SIGUSR2,置flag为0;

                           4》父进程捕捉SIGUSR2,执行捕捉函数,父进程向子进程发送SIGUSR2信号,依次反复...

                     4)运行结果

                    

         5)如果把父子捕捉函数之间的sleep(1)去掉,则程序可能运行出错

             分析:当函数执行完kill(pid,SIGUSR1);给此时若父进程失去cpu,则子进程执行数数,将flag置1,此时子进程给父进程发送SIGUSR2。此时如果父进程获得cpu,此时父进程执行信号捕捉函数,flag置1,随后flag置零,程序结束。

             原因:引入全局变量flag的原因。

(2)可/不可重入函数

          一个函数在被调用执行期间(尚未调用结束),由于某种时序该程序又被重复调用,称为重入(递归调用)。 

          定义可重入函数:1)不能含有全局变量和static变量,不能使用malloc和free函数。

                                          2)信号捕捉函数为可重入函数。

                                          3)信号处理程序可以调用的可重入函数可参阅man 7 signal

        不可重入函数大都包含:1)静态数据结构。2)调用malloc和free函数。3)标准的I/O函数。

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

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

相关文章

LInux操作系统之SIGCHLD信号

(1)SIGCHLD产生条件 1)子进程终止的时候 2)子进程接收到SIGSTOP信号停止时 3)子进程处于停止状态,接受到SIGCONT后唤醒 (2)借助SIGCHLD使用waitpid信号实现父进程对子进程的回收 &a…

linux操作系统之终端

(1)终端分类: AltCtrlF1~F6 字符终端 pts :伪终端 AltCtrlF7 图形终端 SSH,Telnet 网路终端 (2)终端的启动流程 每一个进程都可以通过一个特殊的设备文件/dev/tty访问它的控制终端&#x…

linux操作系统之进程组及会话

(1)进程组(作业):代表一个或多个进程的集合。 1)父进程创建子进程时,默认子进程与父进程属于同一进程组,进程组id第一个进程id(组长id,父进程id)。 2)使用kill -SIGKILL -进程组id(负数&#xf…

linux操作系统之线程同步及互斥量

(1)线程同步 1)线程同步:指一个线程发出某一个功能运行时,在运行还没有结束的时候,该调用不返回。同时其它线程为保证数据的一致性,不能调用该功能。 2)多个控制流共同操作一个共享资…

linux操作系统之读写锁

(1)读写锁:只有一把锁,但是有两种状态(读,写) 1)读写锁的三种状态:读锁,写锁,不加锁 2)读写锁特性(12字)&…

linux操作系统之条件变量

(1)条件变量 条件变量本身不是锁,但它可以造成线程阻塞,通常与互斥锁配合使用。 (2)条件锁相关函数 pthread_cond_t类型,用于定义条件变量 1)初始化一个条件变量:pthrea…

linux操作系统之信号量、互斥量在进程间的同步、文件锁

(1)信号量:进化版的互斥量 多个线程间对某个对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。这样虽然达到了多线程操作数据共享的目的,却导致线程并发性下降。 信号量&#x…

linux网络编程之网络应用设计模式、分层模型、通信过程

(1)网络协议 可以理解为规则,其中包含着数据传输和数据的解释。 典型的协议:传输层:tcp/udp协议,应用层:http/ftp协议,网络层:ip协议,网路接口:ar…

linux网络编程之通信协议格式

好文参考:《网路传输的三张表:MAC地址表,ARP缓存表和路由表》http://www.cnblogs.com/clovn/p/4911212.html (1)数据包封装 传输层及其一下的机制由内核决定,主要负责通讯的具体细节;应用层由用…

linux网络编程之Socket编程

(1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文…

Linux操作系统之简易实现server/client

1.首先将出错处理封装成函数,具体封装思想:是在底层函数的基础上将首字母大写(方便在编程中查找函数文件的manpage,而不需要使用命令,直接用shiftk),然后调用底层库函数并考虑出错处理,具体函数如下&#x…

linux网络编程之TCP三次握手和四次挥手

1.在TCP连接的过程中,有三个阶段,分别是建立连接,传递数据和断开连接,通讯时序图如下所示: 2.结合TCP数据报格式分析建立连接的三次握手 1)首先客户端发送一个带有SYN标志的TCP报文给服务器端,询问服务器端…

linux网路编程之多进程并发服务器

1)使用多进程并发服务器考虑的因素: (1)父进程描述最大文件描述符的个数(父进程需要关闭accept返回的新文件描述符) (2)系统内可创建进程的个数(与内存大小相关&#xff…

linux网路编程之多线程并发服务器

1)在使用进程模型开发服务器过程中考虑以下问题 (1)调整进程内最大文件描述符上限 (2)线程如有共享,考虑线程同步 (3)客户端线程退出时,做退出处理(线程分离&…

linux网路编程之TCP状态转换及端口复用

(1)TCP状态转换图 其中图中分为三种状态:实线代表的主动发起连接,虚线代表的被动发起连接,细实线代表的可以双向发起连接的状态。 主动发起连接方状态变化:1)主动发起连接的一方发送SYN标志位&…

linux网络编程之多路I/o转接服务器select

(1)多路IO转接服务器也叫做多任务IO服务器,其主要思想是不再由程序自己监听客户端连接,取而代之的是由内核替应用程序监视文件,具体实现模型如图所示: 当客户端请求和服务器连接时,内核接收到连接指令,告诉…

linux网络编程之多路I/O转接服务器poll函数

&#xff08;1&#xff09;poll函数 头文件&#xff1a;#include<poll.h> int poll(struct pollfd*fds, nfds_t nfds,int timeout); struct pollffd{ int fd;//文件描述符 short events;//监控的事件 short revents;//监控事件中满足条件返回的事情 }&#xff1…

《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr

C Primer第二章的内容主要介绍了变量和基础类型&#xff0c;包括C语言定义的基础内置类型、变量的定义及声明、符合类型如指针及引用的介绍和const及常量表达式constexpr的介绍&#xff0c;本次博客也从这四个方面进行系统的介绍&#xff0c;如果有不足之处&#xff0c;还望其他…

793. 阶乘函数后K个零 golang

Me(AC 33 / 44 个通过测试用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio单选框回显

话不多说&#xff0c;效果图如下&#xff1a; 具体代码如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…