#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);
}
我无法理解为什么可能的输出是 0102 或 0012 或 0201 或 0021。
这是我(认为)它应该产生的。它命中第一个 printf 语句,无论哪个子或父首先执行,num 都没有被修改,所以首先为 0。THEN next 是 1 或 2,然后执行下一个进程,因此再次从 0 开始(从父级复制),然后再次为 1 或 2。所以可能的输出应该是:
0101 或 0102 或 0201 或 0202