试图了解叉子和信号量

时间:2016-03-30 08:48:23

标签: c process fork semaphore

我在代码中尝试做的是拥有一个父进程,它会分叉两个子进程。我就是这样做的:

pid = fork();

if(pid != 1)
    pid1 = fork();

我要做的下一件事是使用信号量在进程之间(从子进程到其他子进程,按顺序)切换进程。 子过程会说A,另一个孩子会说B,父母会说C,孩子会说D,依此类推。

我的两个问题是:

  • 假设您在信号量中调用sem_wait(sem),并且进程会阻止它。然后继续前进,另一个进程最终调用sem_post(sem)sem_wait之后的代码是否会在sem_post之后立即执行? ie 执行"跳回"到sem_wait之后的代码,即使它没有来到下一个"在该计划?

    if(stuff){
        a; 
        sem_wait(sem); 
        b;
    }
    c; 
    
    sem_post(sem);
    

b即使在"之前也会执行{#1}}这篇文章是以文字方式提出来的吗?

  • 如何识别流程,以便我可以授予其中一个执行权限?在我授予执行代码权限之前,我必须确认进程是子进程1,子进程2还是父进程,但是我怎么知道呢?我尝试使用if语句(if(pid) != 0if(pid() == 0if(pid1 == 0)进行检查,假设父级的第一个分叉的返回值为0且子级将具有他们各自的叉子零,但这不起作用。我检查了他们的PID和PPID,他们到处都是。)

感谢所有帮助,谢谢

0 个答案:

没有答案