【发布时间】:2013-04-17 10:17:16
【问题描述】:
我一直在努力解决同步问题。我有一个进程 A,这是主要进程,还有 3 个 B 类进程。这些进程必须向 A 发出信号并等待响应。
A 正在等待所有 3 个信号。当它们都到达时,A 完成它的工作并向所有 B 进程发出信号,以便它们可以继续工作。
A:
if(/*all signals received*/) {
//do my job
//signal all Bs
}
B:
//some code
signal(A);
pause(); //wait for response
//Do other stuff
当 B 调用 signal(A) 时,A 完成他的工作,向 B 发出信号,然后再次安排 B 导致 B 调用 pause() 并无限期地等待信号。我不知道如何防止这种死锁。
还有其他方法可以实现吗?
【问题讨论】:
-
您的
signal呼叫是否被阻塞?意思是,当 B 类型的进程调用signal(A)时,B 会等待直到 A 发出信号返回吗? -
信号应该是异步的,只需发送消息并继续执行。这就是为什么我在那之后尝试调用 pause() 的原因。如果这就是你的意思...
-
哦,我忘了说,它是在类 Unix 系统上编写的……所以它使用的是 unix 信号……
-
是的。我正是这个意思。另外,当 B 类进程执行
pause时,它是否会在接收到某些信号时唤醒? -
如果我发送任何随机信号,是的……但是我需要做出反应的来自 A 的信号已经丢失了……
标签: c linux process synchronization signals