C 这个平行流能工作吗?
我正在尝试将并行处理组件添加到单线程单进程程序中。我只是在学习一些多处理方法,因此对它们的能力并不完全确定 我希望实现的程序逻辑:C 这个平行流能工作吗?,c,parallel-processing,fork,wait,C,Parallel Processing,Fork,Wait,我正在尝试将并行处理组件添加到单线程单进程程序中。我只是在学习一些多处理方法,因此对它们的能力并不完全确定 我希望实现的程序逻辑: 主进程调用一个函数。 在for循环的开始处调用函数fork()。 子函数继续执行函数工作,或者执行其他子函数,或者基于时间检查退出返回 同时,父循环循环首先结束,然后再次开始,从而重新分叉第二个子循环 函数将继续执行,直到执行大约10个fork()之后for循环结束 函数在基于更高级别计时器完成后再次被调用 这项实施会奏效吗?示例代码: check_ti
- 主进程调用一个函数。
- 在for循环的开始处调用函数fork()。
- 子函数继续执行函数工作,或者执行其他子函数,或者基于时间检查退出返回
- 同时,父循环循环首先结束,然后再次开始,从而重新分叉第二个子循环
- 在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上执行?@jakeman 2 waitpid
。-1
的pid
参数表示“等待任何子进程”。你不能等待不是你自己的孩子,所以这不是问题。是的,父进程总是会为fork()
返回得到一个非零值。所以看起来好像所有子进程都没有等待,对吗?我可以实现一个循环计数器,它等待任何子循环,但等待所有10个子循环完成吗?我真的只需要确保所有子项都已返回,因为任何打开的子项都可能在下一次迭代中导致访问问题。正如我在帖子中所说的,循环,直到返回-1
和错误状态ECHILD
。因此我必须循环执行waitpid(-1,&status,0)编码>并比较和状态
,直到找到ECHILD
,然后我可以退出()代码>整个函数?