C 这个平行流能工作吗?

C 这个平行流能工作吗?,c,parallel-processing,fork,wait,C,Parallel Processing,Fork,Wait,我正在尝试将并行处理组件添加到单线程单进程程序中。我只是在学习一些多处理方法,因此对它们的能力并不完全确定 我希望实现的程序逻辑: 主进程调用一个函数。 在for循环的开始处调用函数fork()。 子函数继续执行函数工作,或者执行其他子函数,或者基于时间检查退出返回 同时,父循环循环首先结束,然后再次开始,从而重新分叉第二个子循环 函数将继续执行,直到执行大约10个fork()之后for循环结束 函数在基于更高级别计时器完成后再次被调用 这项实施会奏效吗?示例代码: check_ti

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

我希望实现的程序逻辑:

  • 主进程调用一个函数。
    • 在for循环的开始处调用函数fork()。
      • 子函数继续执行函数工作,或者执行其他子函数,或者基于时间检查退出返回
    • 同时,父循环循环首先结束,然后再次开始,从而重新分叉第二个子循环
  • 函数将继续执行,直到执行大约10个fork()之后for循环结束
  • 函数在基于更高级别计时器完成后再次被调用
这项实施会奏效吗?示例代码:

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..
}
检查计时器(){
对于(i=0;i<10;i++){
pid_t pid=fork();
如果(pid==0){
执行子1检查并可能执行。。
退出();//完成时
}
否则{
家长可能会做些什么或只是结束第一轮for循环。。
}
}
wait()的一些实现;在离开check_timer()函数之前等待所有子函数完成。。
}

这会不会一次创建多达10个子进程,在父进程的后台执行,然后等待子进程完成?另外,关于如何使用wait()的一些提示也会很有帮助。

是的,您将总共有11个进程

您可能希望调用
waitpid
函数,直到不再有子函数为止(返回
ECHILD


编辑:刚刚注意到您需要
pid\u t pid=fork(),而不是
pid=pid()

是否有特定参数需要传递给waitpid();还是只知道照顾父母和孩子?另外,pid检查是否总是只需要检查0值?父对象是否总是正确地在else上执行?@jake
man 2 waitpid
-1
pid
参数表示“等待任何子进程”。你不能等待不是你自己的孩子,所以这不是问题。是的,父进程总是会为
fork()
返回得到一个非零值。所以看起来好像所有子进程都没有等待,对吗?我可以实现一个循环计数器,它等待任何子循环,但等待所有10个子循环完成吗?我真的只需要确保所有子项都已返回,因为任何打开的子项都可能在下一次迭代中导致访问问题。正如我在帖子中所说的,循环,直到返回
-1
和错误状态
ECHILD
。因此我必须循环执行
waitpid(-1,&status,0)并比较
和状态
,直到找到
ECHILD
,然后我可以
退出()整个函数?