다음을 통해 공유


ReaderWriterLockSlim.EnterReadLock 메서드

정의

읽기 모드로 잠금을 시작하려고 합니다.

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 하는 스레드는 즉시 읽기 모드로 전환되고 차단되지 않습니다.

적용 대상