【发布时间】:2014-06-17 12:10:34
【问题描述】:
在下面的程序中,父进程的局部变量如何成为三个子进程之间的共享变量。
int main()
{
int turn = 0;
int i;
for (i = 0; i < 3; i++)
{
if (fork() == 0)
{
int me = i;
while (turn != me)
/*do nothing*/ ;
// my turn
printf("Process %d ran\n", me);
turn++;
}
}
return 0;
}
输出:
进程 0 运行
进程 1 运行
进程 2 运行
但根据我的说法,最后两个进程应该挂起,因为 turn 的值不应该改变它们。
如果我放了一个 exit(0);在转++之后,我立即返回到我的shell提示符,只有一行输出,即: 进程 0 运行
但其他两个进程仍然在后台运行,其他两个进程没有任何输出。
【问题讨论】:
-
究竟是什么让您认为
turn被分享了? -
作为 turn = 0 的初始值,当 for 循环第二次进入时 me = 1 并且 turn 应该等于 0,因为我们已经在子进程中更改了它,而不是在父进程中,所以当第二次进入 for 循环的时间应该是 = 0 和 me = 1 因此 while(turn != me) ; //应该无限运行代码不应该低于这个
-
您希望您的代码会创建多少个进程?
-
应该是三个...我哪里弄错了请告诉。
-
现在我知道将创建 6 个进程,因为如果我们在低级别看到循环结束只是一个分支语句,因此分叉的进程将跳回 for 循环创建这些额外的进程.