しばらくの間、同期の問題に苦しんできました。プロセス A があります。これがメインのプロセスで、タイプ B のプロセスが 3 つあります。これらのプロセスは、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()
、信号を無期限に待機させます。このデッドロックを防ぐ方法がわかりません。
これを達成する他の方法はありますか?