많은 자습서에서 ReWriteLock의 재진입 불가능한 구현에서 나타났습니다.ReadWriteLocks- 읽기 잠금을 얻기 위해 여러 독자를 지원하는 방법 (재진입이 아닌)
public class ReadWriteLock{
private int readers = 0;
private int writers = 0;
private int writeRequests = 0;
public synchronized void lockRead() throws InterruptedException{
while(writers > 0 || writeRequests > 0){
wait();
}
readers++;
}
public synchronized void unlockRead(){
readers--;
notifyAll();
}
public synchronized void lockWrite() throws InterruptedException{
writeRequests++;
while(readers > 0 || writers > 0){
wait();
}
writeRequests--;
writers++;
}
public synchronized void unlockWrite() throws InterruptedException{
writers--;
notifyAll();
}
}
질문 :
객체 (lock
말)이 클래스는 동기화를 위해 모든 독자와 작가 스레드에서 공유된다.
리더 T1이 lock.lockRead()
을 호출하면 잠금 객체에 대한 잠금이 획득되고 동시에 리더 T2가 lockRead()
을 동일한 객체에 호출한다고 가정합니다. 그러나 T1은 이미 객체를 잠갔습니다. 따라서 T2는 대기열에서 차단되고 대기해야합니다.
그래서 코드를 통해 여러 독자가 동시에 readLock을 설정할 수 있습니까?
내가 잘못했을 때 알려주십시오.
감사합니다. 도움이되었습니다. – Pintu