0

しばらくの間、同期の問題に苦しんできました。プロセス 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()、信号を無期限に待機させます。このデッドロックを防ぐ方法がわかりません。

これを達成する他の方法はありますか?

4

1 に答える 1

0

セマフォを IPC 同期として使用することを検討してください。
シグナルを送信するプロセスは、セマフォをロックする必要が
あり、A のリターンを受信した後、ロックを解除して次のプロセスを続行できるようにします。

于 2013-04-17T11:00:32.520 に答える