0

안녕하세요, 저는 Java에서 ReadWriteLock에 대해 읽었지만, 그 중 재진입 부분을 파악한 것은 확실하지 않습니다. 여기 가 재입국에게Java ReadWriteLock Reentrance

public class Locks { 
    public static void main(String[] args) { 
     ReadWriteLock lock = new ReentrantReadWriteLock(); 
     lock.writeLock().lock(); 
     lock.readLock().lock(); 
     System.out.println("Reentrance acheieved"); 
     lock.readLock().unlock(); 
     lock.writeLock().unlock(); 
    } 
} 

표시하는 하나의 메인 쓰레드를 사용하여 두 개의 짧은 코드 예 및 SYSOUT가 아닌 두 번째로 수행하는 첫 번째에서 두 번째 예

public class Locks { 
    public static void main(String[] args) { 
     ReadWriteLock lock = new ReentrantReadWriteLock(); 
     lock.readLock().lock(); 
     lock.writeLock().lock(); 
     System.out.println("Reentrance acheieved"); 
     lock.writeLock().unlock(); 
     lock.readLock().unlock(); 
    } 
} 

인 이유는 그? 두 잠금 장치는 동일한 스레드에 의해 얻어 져서 여기에 재진입 상황이 있지만, 진입이 불가능한 상황에서 의사가 독서 작업이 모든 다른 작업 (쓰기 또는 읽기).

+0

가능한 복제 [자바 ReentrantReadWriteLocks - 안전하게 쓰기 잠금을 획득하는 방법 (http://stackoverflow.com/questions/464784/java-reentrantreadwritelocks-how-to-safely-acquire-write-lock) – shmosel

답변

2

대답은 "재 입력"아래의 문서에 바로 거기에 있습니다 :

이 잠금은 독자와 작가 모두 읽거나 ReentrantLock와의 스타일 잠금을 쓰기 재 취득 할 수 있습니다. 쓰기 스레드가 보유한 모든 쓰기 잠금이 릴리스 될 때까지 재진입 불가능한 독자는 이 허용되지 않습니다.

또한 작성자는 읽기 잠금을 획득 할 수 있지만 반대의 경우도 마찬가지입니다. 쓰기 잠금이 호출 중에 수행되거나 읽기 잠금 아래에서 읽기를 수행하는 메서드에 대한 콜백 일 때 재진입 기능이 유용 할 수 있습니다. 독자가 쓰기 잠금을 획득하려고 시도하면 이 성공하지 못합니다.