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 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.