如何防止死锁?

时间:2013-04-17 10:17:16

标签: c linux process synchronization signals

我一直在努力解决同步问题。我有一个进程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()并无限期地等待信号。我不知道如何防止这种僵局。

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

考虑使用信号量作为IPC同步,
任何想发送信号的进程都要锁定信号量,
并且在收到A的回报后,解锁它以便下一个过程可以继续。