Java에서 읽기/쓰기 모니터 구현이 있다고 가정합니다. notifyAll()
가 동기화 방법의 마지막 문이 아닌 경우notifyall() 마지막 문이 아님
여러 독자 또는 지금 한 번 (둘)
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;
}
}
에서 데이터베이스에 액세스 할 수있는 한 작가는 문제가 무엇입니까?
는 가정 : EndRead()
가
2 실행
1)) notifyAll()
모든 대기중인 스레드
3) 다음은 독자 카운트 감소에 통지한다.
notifyAll()
을 실행하면 깨우기 스레드가 RWmonitor의 잠금을 해제하기를 기다리고 있기 때문에 비용이 더 많이 듭니까? (RWmonitor에 대한 잠금이있는 스레드가 여전히 readers--;
에 있다고 가정)
효능에는 차이가 있습니까? 또는 과실로 간주 될 수 있습니까? – ali
@ali - 이론적으로 알림을받은 후 최대한 빨리 동기화 된 블록을 종료하는 것이 더 효율적입니다 (즉 알림은 마지막 작업이어야 함). – jtahlborn
@jtahlborn 아 괜찮아! – ali