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函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值