Freigeben über


ReaderWriterLockSlim.ExitReadLock Methode

Definition

Verringert die Rekursionszahl für den Lesemodus und beendet den Lesemodus, wenn das Rekursionsergebnis 0 (null) ist.

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

Ausnahmen

Der aktuelle Thread befindet sich nicht im Lesemodus.

Beispiele

Das folgende Beispiel zeigt, wie Sie einen finally Block verwenden, um die ExitReadLock -Methode auszuführen, um sicherzustellen, dass der Aufrufer den Lesemodus beendet. Die im Beispiel gezeigte Methode ruft den einem Schlüssel zugeordneten Wert ab. Wenn der Schlüssel nicht gefunden wird, kann die vom inneren Dictionary<TKey,TValue> ausgelöste Ausnahme die -Methode beenden. Die EnterReadLock -Methode wird verwendet, um in den Lesemodus zu wechseln.

Dieser Code ist Teil eines größeren Beispiels, das für die ReaderWriterLockSlim -Klasse bereitgestellt wird.

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

Hinweise

Diese Methode ist nicht empfindlich für die Rekursionsreihenfolge. Wenn ein Thread beispielsweise im upgradefähigen Modus in eine Sperre wechselt und dann im Lesemodus in die Sperre wechselt, spielt die Reihenfolge, in der der Thread die beiden Modi beendet, keine Rolle. Wenn eine Sperre die Rekursion zulässt, kann ein Thread im Schreibmodus in die Sperre eintreten und sie dann rekursiv im Lesemodus eingeben. Die Reihenfolge, in der der Thread den Lese- und Schreibmodus beendet, spielt keine Rolle.

Das Beenden der Sperre kann andere wartenden Threads signalisieren.

Gilt für: