【发布时间】:2014-04-13 21:36:06
【问题描述】:
我正在编写一个多线程应用程序(学校项目,修改过河问题)。 我正在使用 POSIX 信号量、共享内存和 fork 函数。主进程创建 2 个进程。然后他们每个人都创建了 N 个进程。每个进程代表一个人。我想知道父母等待所有孩子完成然后获得退出代码的专业技术/最佳方法是什么。我不/不能使用以下结构:
while (wait(NULL) > 0)
;
// parent code
没有使用共享变量的构造
while (1)
if (num_of_processes == num_of_finished_processes)
break;
// parent_code
注意:num_of_processes 是传递给程序的参数
我能否以某种方式使用信号量告诉父母:“现在醒来并执行您的代码”。 一句话。我不想使用主动/循环等待。 谢谢你的任何建议。我只是这个领域的初学者。
【问题讨论】:
-
您可以在退出之前增加子进程的信号量(或注册一个 dtor 函数(在真正退出之前执行))。在主进程中,您将尝试减少它(在进程增加信号量时阻塞信号量)并使用 child_exited_counter。或者只使用信号
-
你能解释一下你不能使用
wait()的原因吗?我问,因为您要求专业技术。 -
专业技术,函数wait in loop吗?在项目规范中是不要使用主动等待 IPC。
-
根据需要调用 wait()(或 waitpid())就足够了。
标签: c linux process posix wait