1

Javaでユニセックスバスルームの問題を解決しようとしています。要するに、男性と女性の両方が使用できるトイレの数が無限にある1つのバスルームがあります。男性と女性が同時にトイレにいることはできませんが、複数の男性または女性は同時に入ることができます。男性と女性はスレッドで表され、バスルームはモニター(同時実行がどのように機能するかを監視および指示する同期メソッドを備えた共有オブジェクト)で表されます。

さて、私の質問です。通常、次のように記述します。

public synchronized void womanEnter()
{
   while(menInTheBathroom>0 || menWaiting>0)
   {
      wait();
   }
    //enter bathroom
}

そして、そのプロセスを目覚めさせるには、notify()ですが、私は(私が思うに)男性と女性に別々に通知できる必要があります。男性がトイレに入ると、列に並んでいるすべての男性に通知してほしい。モニターでいくつかのセマフォを使用することはできますが、エクササイズでは許可されていません。待機して通知できるモニターの条件を使用できますか?また、可能であれば、どのように使用できますか?試しましたが、モニターの状態が不正であるというエラーがたくさん発生しました。

4

1 に答える 1

1

notifyAllすべてのケースをキャッチするためにを使用する必要があります(通常notifyはより具体的です)。whileループ(を使用しないでくださいif)は、望ましくない場合の継続から保護します。

Conditionより効率的に、しかしより冗長に、のロックから使用することができますjava.util.concurrent.locks

于 2013-02-25T00:40:48.243 に答える