ReaderWriterLockSlim.EnterReadLock Methode

Definition

Versucht, die Sperre im Lesemodus einzugeben.

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

Ausnahmen

Die RecursionPolicy Eigenschaft ist NoRecursion, und der aktuelle Thread hat versucht, die Lesesperre abzurufen, wenn sie bereits die Lesesperre enthält.

-oder-

Die RecursionPolicy Eigenschaft ist NoRecursion, und der aktuelle Thread hat versucht, die Lesesperre abzurufen, wenn sie bereits die Schreibsperre enthält.

-oder-

Die Rekursionszahl würde die Kapazität des Zählers überschreiten. Dieser Grenzwert ist so groß, dass Anwendungen niemals auf diese Ausnahme stoßen sollten.

Das ReaderWriterLockSlim Objekt wurde verworfen.

Beispiele

Das folgende Beispiel zeigt, wie Sie die EnterReadLock Methode verwenden, um die Sperre in den Lesemodus einzugeben. 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. Zum Ausführen der ExitReadLock Methode wird ein finally Block verwendet, der sicherstellt, dass der Aufrufer den Lesemodus verlässt.

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 blockiert, bis der aufrufende Thread die Sperre eingibt und daher möglicherweise nie zurückgegeben wird. Verwenden Sie die TryEnterReadLock Methode, um für ein angegebenes Intervall zu blockieren, und geben Sie dann zurück, wenn der aufrufende Thread während dieses Intervalls keinen Lesemodus eingegeben hat.

Mehrere Threads können gleichzeitig in den Lesemodus wechseln.

Wenn mindestens ein Threads darauf wartet, in den Schreibmodus zu wechseln, wird ein Thread, der die EnterReadLock Methodenblöcke aufruft, bis diese Threads entweder einen Timeout oder einen Schreibmodus überschritten haben und dann von ihr beendet wurden.

Note

Wenn eine Sperre Rekursion zulässt, kann ein Thread, der die Sperre im Lesemodus eingegeben hat, rekursiv in den Lesemodus wechseln, auch wenn andere Threads darauf warten, in den Schreibmodus zu wechseln.

Höchstens ein Thread kann im Upgrademodus ausgeführt werden, während andere Threads im Lesemodus sind. Wenn zusätzliche Threads darauf warten, in den upgradefähigen Modus zu wechseln, und es gibt keine Threads, die auf den Schreibmodus warten, Threads, die die Methode sofort in den EnterReadLock Lesemodus aufrufen und nicht blockieren.

Gilt für: