【发布时间】:2012-08-07 06:21:05
【问题描述】:
我有一个父进程,它产生一定数量的子进程。这些子进程做一些工作并通过进程间消息队列向父进程发送带有结果的消息。但是,我也希望子进程等待父进程向它们发送消息已被正确接收和处理的确认,并且只有在收到父进程的此类信号后才终止。
现在,代码看起来或多或少是这样的:
parent child
spawn process
wait for message do processing
send message
receive message wait on condvar
save the message
notify the condvar resume execution
wait for child termination terminate
如果父母在孩子甚至开始等待它之前在 condvar 上执行notify,这当然会导致死锁 - 如果发生这种情况,那么父母会等待孩子退出,而孩子等待条件变量上的信号。
所以,我的问题是:如何确保孩子总是首先执行wait,即在父母执行notify之前?还是我对整个问题的看法完全错了?
提前谢谢你。
【问题讨论】:
-
使用一些记得被通知的进程间对象?您正在开发什么操作系统?
-
视窗。不过,如果 Boost 提供这样的功能,我宁愿使用它。
-
那么,C++ 呢?可能值得为此和/或 Boost 添加标签。
-
其实哪种语言都没有关系(除了说用哪种语言编写代码示例)。问题在于如何使用 condvar,并且任何具有“condvar”的语言都以相同的方式使用它。
-
是的 + 对于@Damien_The_Unbeliever - 我只是为此使用命名事件或信号量。 Boost 似乎有点缺乏基本的同步原语 :(
标签: c++ multithreading boost deadlock