我正在阅读教科书(哲学家就餐问题)和 main 方法中的代码示例,就在 return 0 之前;声明,下面是我包含的代码块。这个循环应该将每个哲学家创建为一个并发的 fork 过程。这意味着每个哲学家都执行 philosopher(i)。
但是,由于在 if 语句之后紧接着有一个中断,这是否意味着只创建了第一个哲学家 (i = 0)?
for (i = 0; i < N - 1; ++i)
if (fork() == 0)
break;
philosopher(i) ;
最佳答案
fork(2)
将调用它的进程“拆分”为两个独立的进程,第二个是第一个的子进程。在父进程(原始进程)中,它返回子进程的 PID。在子进程中,fork()
返回0
。
因此在您的示例中,循环仅在子进程中中断,同时在父进程中继续生成剩余的哲学家。
循环执行 N - 1
次,产生 N - 1
个子哲学家。完成循环后,父进程还调用philosopher(i)
,运行第N
也是最后一个哲学家。
关于c - 如果在 for 循环中创建子进程的 if 语句中有 break,循环是否不再执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272834/