c - 如果在 for 循环中创建子进程的 if 语句中有 break,循环是否不再执行?

标签 c for-loop if-statement fork break

我正在阅读教科书(哲学家就餐问题)和 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/

相关文章:

java - 加法和级数

C InternetGetConnectedState 循环

C 指针算术异常行为

python - 为什么下面的代码在循环外给出错误的输出

java - 两个操作如何在if-else if语句中?

javascript - 访问最后一个 if 语句条件结果值

c - 当 char * 被类型定义并通过结构访问时,为什么编译器会发现 char * 和 printf 的转换说明符 "s"不匹配?

c - Linux C 将缓冲区从 while 循环问题写入文件

vba - 无法理解如何在 Excel VBA 中使用 for...next 循环

php - 重新排序多维数组,以便每 4 行出现具有特定列值的行