这个并行流会工作吗?

时间:2012-01-28 19:55:18

标签: c parallel-processing fork wait

我正在尝试将并行处理组件添加到单个线程单进程程序中。我只是在学习一些多处理方法,因此我们并不完全确定它们的能力。

我想要实现的程序逻辑:

  • 主进程调用一个函数。
    • 在for循环开始时调用函数fork()。
      • 孩子继续执行功能工作,执行其他子功能或根据时间检查退出。
    • 同时,父母首先结束循环并再次开始,因此重新分叉第二个孩子。
  • 函数继续执行,直到执行了大约10个fork()之后循环结束。
  • 函数在基于更高级别的计时器完成后再次被调用。

此实施是否有效?示例代码:

check_timer() {
   for(i = 0; i < 10; i++) {
      pid_t pid = fork();
      if(pid == 0) {
         execute child 1 checks and possible executes..
         exit(); // when completed
      }
      else {
         parent maybe does something or just ends first round of for loop..
      }
   }
some implementation of wait(); to wait for all children to finish before leaving check_timer() function..
}

这会在父母的背景中同时创建多达10个子进程,然后等待孩子们完成吗?关于如何使用wait()的一些提示也会有所帮助。

1 个答案:

答案 0 :(得分:2)

是的,您最终将获得11个流程。

您可能需要waitpid函数,在没有更多子项(返回ECHILD)之前调用该函数。

编辑:刚发现你需要pid_t pid = fork();,而不是pid = pid();