我试图理解为什么这个程序的输出始终以012xxxxxxx
开头。这是代码:
int main() {
int i;
for (i=0; i<2; i++) {
fork();
printf("%d", i);
}
printf("2");
}
我勾画了流程图:
但我不明白这个输出是如何可能的。 有人可以帮我看看为什么总是如此。
答案 0 :(得分:0)
一个简单的解释是,原始进程比分叉进程更快准备好继续。
因此原始进程触发OS中的分叉,然后继续,生成0,1,2,并完成。然后分叉的进程开始并进行打印。
请注意fork()
不保证执行两个进程的顺序;它们只是操作系统中的两个独立进程。操作系统很可能让第一个在切换之前运行另外100个CPU周期(然后它已经完成)
在另一个操作系统上,它可能只是反过来......