1

我正在尝试用 Java 解决男女皆宜的浴室问题。简而言之,就是一间浴室,厕所数量不限,男女均可使用。男人和女人不能同时在浴室,但几个男人或女人可以。男人和女人由线程代表,浴室由监视器(具有同步方法的共享对象,监视并指示并发的工作方式)。

现在我的问题。通常你会写这样的东西:

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

为了唤醒这个过程,你 notify() 但我(我想我)需要能够分别通知男性和女性。如果一个人进入浴室,我希望他通知所有排队的人。我可以在监视器中使用几个信号量,但这在 excersize 中是不允许的。我可以在监视器中使用我可以等待和通知的条件吗?如果可以,怎么做?我试过了,但遇到了一堆涉及非法监视器状态的错误。

4

1 回答 1

1

您需要使用notifyAll来捕获所有案例(通常notify更具体)。您的 while 循环(不要使用 a if)可以防止在不需要的情况下继续。

更有效,但也更冗长,您可以使用Conditionfrom the locks in java.util.concurrent.locks

于 2013-02-25T00:40:48.243 回答