#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