ReaderWriterLockSlim.EnterReadLock 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
읽기 모드로 잠금을 시작하려고 합니다.
public:
void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
예외
RecursionPolicy 속성이 NoRecursion이고 현재 스레드에서 이미 읽기 잠금을 보유하고 있는 상황에서 읽기 잠금을 가져오려고 시도한 경우
또는 RecursionPolicy 속성이 NoRecursion이고 현재 스레드에서 이미 쓰기 잠금을 보유하고 있는 상황에서 읽기 잠금을 가져오려고 시도한 경우
또는 재귀 횟수가 카운터의 용량을 초과할 수 있습니다. 이 제한은 애플리케이션에서 이 예외가 발생하지 않을 정도로 매우 큽니다.
ReaderWriterLockSlim 개체가 삭제되었습니다.
예제
다음 예제에서는 메서드를 사용하여 EnterReadLock 읽기 모드에서 잠금을 입력하는 방법을 보여줍니다. 예제에 표시된 메서드는 키와 연결된 값을 검색합니다. 키를 찾을 수 없는 경우 내부 Dictionary<TKey,TValue> 에서 throw된 예외는 메서드를 종료할 수 있습니다. finally
블록은 호출자가 읽기 모드를 종료하도록 메서드를 실행하는 ExitReadLock 데 사용됩니다.
이 코드는 클래스에 제공된 더 큰 예제의 ReaderWriterLockSlim 일부입니다.
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public string Read(int key)
{
cacheLock.EnterReadLock();
try
{
return innerCache[key];
}
finally
{
cacheLock.ExitReadLock();
}
}
Public Function Read(ByVal key As Integer) As String
cacheLock.EnterReadLock()
Try
Return innerCache(key)
Finally
cacheLock.ExitReadLock()
End Try
End Function
설명
이 메서드는 호출 스레드가 잠금에 들어갈 때까지 차단되므로 반환되지 않을 수 있습니다. 메서드를 TryEnterReadLock 사용하여 지정된 간격을 차단한 다음 호출 스레드가 해당 간격 동안 읽기 모드로 들어가지 않은 경우 반환합니다.
여러 스레드가 동시에 읽기 모드로 전환할 수 있습니다.
하나 이상의 스레드가 쓰기 모드로 전환되기를 기다리는 경우 해당 스레드가 시간 초과되거나 쓰기 모드로 전환된 후 종료될 때까지 메서드를 호출 EnterReadLock 하는 스레드가 차단됩니다.
참고
잠금이 재귀를 허용하는 경우 읽기 모드에서 잠금을 입력한 스레드는 다른 스레드가 쓰기 모드로 전환되기를 기다리는 경우에도 읽기 모드로 재귀적으로 들어갈 수 있습니다.
다른 스레드가 읽기 모드인 동안 최대 하나의 스레드는 업그레이드 가능한 모드일 수 있습니다. 추가 스레드가 업그레이드 가능 모드로 전환되기를 기다리고 있고 쓰기 모드로 전환되기를 기다리는 스레드가 없는 경우 메서드를 호출 EnterReadLock 하는 스레드는 즉시 읽기 모드로 전환되고 차단되지 않습니다.