Поделиться через


ReaderWriterLockSlim.ExitReadLock Метод

Определение

Уменьшает счетчик глубины рекурсии для режима чтения и выходит из режима чтения, если счетчик принял значение 0 (нуль).

public:
 void ExitReadLock();
public void ExitReadLock ();
member this.ExitReadLock : unit -> unit
Public Sub ExitReadLock ()

Исключения

Текущий поток не вошел в блокировку в режиме чтения.

Примеры

В следующем примере показано, как использовать finally блок для выполнения ExitReadLock метода , гарантируя, что вызывающий объект выходит из режима чтения. Метод, показанный в примере, извлекает значение, связанное с ключом. Если ключ не найден, исключение, созданное внутренним Dictionary<TKey,TValue> , может завершить метод . Метод EnterReadLock используется для входа в режим чтения.

Этот код является частью более крупного примера, предоставленного 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

Комментарии

Этот метод не учитывает порядок рекурсии. Например, если поток входит в блокировку в обновляемом режиме, а затем переходит в режиме чтения, порядок выхода потока из этих двух режимов не имеет значения. Если блокировка допускает рекурсию, поток может перейти на блокировку в режиме записи, а затем ввести ее рекурсивно в режиме чтения; Порядок выхода потока из режима чтения и записи не имеет значения.

Выход из блокировки может сигнализировать о других ожидающих потоках.

Применяется к