我正在尝试用 Java 解决男女皆宜的浴室问题。简而言之,就是一间浴室,厕所数量不限,男女均可使用。男人和女人不能同时在浴室,但几个男人或女人可以。男人和女人由线程代表,浴室由监视器(具有同步方法的共享对象,监视并指示并发的工作方式)。
现在我的问题。通常你会写这样的东西:
public synchronized void womanEnter()
{
while(menInTheBathroom>0 || menWaiting>0)
{
wait();
}
//enter bathroom
}
为了唤醒这个过程,你 notify() 但我(我想我)需要能够分别通知男性和女性。如果一个人进入浴室,我希望他通知所有排队的人。我可以在监视器中使用几个信号量,但这在 excersize 中是不允许的。我可以在监视器中使用我可以等待和通知的条件吗?如果可以,怎么做?我试过了,但遇到了一堆涉及非法监视器状态的错误。