利用信号解决竞争条件

在父进程调用fork创建了子进程后,父进程和子进程可能都有一些事情要做。例如,父进程需用子进程ID更新日志,子进程可能需要为父进程创建一个文件。fork后哪一个进程会先被调度执行是未知的,因此便会产生竞争条件。

#include"apue.h"
TELL_WAIT();//set things up for TELL_XXX and WAIT_XXX
if((pid=fork())<0)
{
        err_sys("fork error!");
}
else if(pid==0)
{
        /*child process does whatever is necessary*/
        
        TELL_PARENT(getppid());//tell parent we are done
        WAIT_PARENT();//wait for parent
        
        /*and the child continues on its way*/
        
        exit(0);
}
/*parent does whatever is necessary*/

TELL_CHILD(pid);//tell child we are done
WAIT_CHILD();//wait for child;

/*and the parent continues on its way*/
exit(0);

图中,fork之后花开两朵,两个进程各自做自己的事情,但是两个进程完成若想完成后面的工作,则对另一进程有所依赖。例如只有当子进程创建了文件之后父进程才能继续后面的工作,或者是只有当父进程更新完日志之后子进程才能进行后面的工作,为达到这个目的,需要两个进程之间相互协调,即进程间通信(IPC)。IPC的具体实现方式有多种&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值