我一直在努力解决同步问题。我有一个进程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()
并无限期地等待信号。我不知道如何防止这种僵局。
还有其他方法可以达到这个目的吗?
答案 0 :(得分:0)
考虑使用信号量作为IPC同步,
任何想发送信号的进程都要锁定信号量,
并且在收到A的回报后,解锁它以便下一个过程可以继续。