小编Loc*_*ell的帖子

通过一个简单的例子来理解C的fork()

#include <stdio.h>
int num = 0;
int main(int argc, char*argv[]){
    int pid;
    pid = fork();
    printf("%d", num);  
    if(pid == 0){       /*child*/
        num = 1;
    }else if(pid > 0){  /*parent*/
        num = 2;
    }
    printf("%d", num);
}
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么可能的输出是0102或0012或0201或0021.

这是我认为它应该产生的东西.它命中第一个printf语句,无论先执行什么子项或父项,num都没有被修改,所以首先是0.那么接下来是1或2,然后执行下一个过程,所以再次从0开始(从父项复制),然后再次从1或2开始.所以可能的输出应该是:

0101或0102或0201或0202

c fork concept

9
推荐指数
2
解决办法
4万
查看次数

标签 统计

c ×1

concept ×1

fork ×1