假设我在 Java 中有一个读/写监视器实现。
多位读者或一位作者可以同时访问数据库(不能同时访问两者)
class RWmonitor{
private int readers = 0;
private boolean writing = false;
public synchronized void StartRead(){ ..}
public synchronized void EndRead(){
notifyAll();
readers--;
}
public synchronized void StartWrite(){ ..}
public synchronized void EndWrite(){
notifyAll();
writing = false;
}
}
现在,如果notifyAll()
不是同步方法中的最后一条语句,这有关系吗?
认为:
1)EndRead()
执行
2)notifyAll()
通知所有等待线程
3)然后它减少了读者数量。
当它执行时notifyAll()
,是否会因为唤醒的线程等待 RWmonitor 上的锁被释放而成本更高?(假设锁定 RWmonitor 的线程仍在readers--;
)