ReaderWriterLockSlim.EnterReadLock Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Versucht, die Sperre im Lesemodus zu erhalten.
public:
void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Ausnahmen
Die RecursionPolicy-Eigenschaft ist gleich NoRecursion, und der aktuelle Thread hat versucht, die Lesesperre zu erlangen, obwohl er die Lesesperre bereits besitzt.
- oder -
Die RecursionPolicy-Eigenschaft ist gleich NoRecursion, und der aktuelle Thread hat versucht, die Lesesperre zu erlangen, obwohl er die Schreibsperre bereits besitzt.
- oder -
Die Anzahl von Rekursionen würde die Kapazität des Zählers überschreiten. Dieser Grenzwert ist so groß, dass diese Ausnahme nie für Anwendungen auftreten sollte.
Das ReaderWriterLockSlim -Objekt wurde verworfen.
Beispiele
Das folgende Beispiel zeigt, wie Sie die EnterReadLock -Methode verwenden, um die Sperre im Lesemodus zu öffnen. 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. Ein finally
-Block wird verwendet, um die ExitReadLock -Methode auszuführen, um sicherzustellen, dass der Aufrufer den Lesemodus verlässt.
Dieser Code ist Teil eines größeren Beispiels für die ReaderWriterLockSlim -Klasse.
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 in die Sperre eintritt, und gibt daher möglicherweise nie zurück. 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 nicht in den Lesemodus gewechselt ist.
Mehrere Threads können gleichzeitig in den Lesemodus wechseln.
Wenn ein oder mehrere Threads darauf warten, in den Schreibmodus zu wechseln, blockiert ein Thread, der die EnterReadLock -Methode aufruft, so lange, bis für diese Threads ein Timeout aufgetreten ist oder in den Schreibmodus gewechselt ist.
Hinweis
Wenn eine Sperre die Rekursion zulässt, kann ein Thread, der die Sperre im Lesemodus betreten hat, rekursiv in den Lesemodus wechseln, auch wenn andere Threads darauf warten, in den Schreibmodus zu wechseln.
Höchstens ein Thread kann sich im upgradefähigen Modus befinden, während sich andere Threads im Lesemodus befinden. Wenn weitere Threads darauf warten, in den upgradefähigen Modus zu wechseln, und keine Threads darauf warten, in den Schreibmodus zu wechseln, wechseln Threads, die die Methode aufrufen, sofort in den EnterReadLock Lesemodus und blockieren sie nicht.