C-将以可预测的顺序执行()呼叫



假设我有以下代码:

pid_t pid0, pid1;
pid0 = fork();
if (!pid0) {
    pid1 = fork();
    if (!pid1) { // p2
        /* do something */
        return; 
    } else {    // p1
        wait(NULL);
        printf("p1 donen");
        return;
   }
} 
// p0
wait(NULL):
printf("p0 donen");

打印语句的顺序是确定性的,还是取决于CPU的意愿?在实践中,每次似乎都是相同的,但是wait()的文档使它看起来应该是随机的。

编辑:我已经考虑了更多的事情,我想知道它是否总是按顺序进行的,因为P0没有P2作为儿童过程;那是P1的孩子。因此," P0完成"直到P1完成等待孩子P2之前才打印。因此,我想真正的问题是wait()是否要等待孩子的孩子,或者只是处理一个"一代"

过程0将始终等待进程1,因为那是它唯一的孩子。过程1将始终等待过程2,因为那是它唯一的孩子。

进程0直到进程1退出之前才从wait返回,这意味着该过程1已经打印了其消息,因为它在退出之前就可以了。

因此,在这种情况下,要等到打印消息后才能继续。

最新更新