ReaderWriterLockSlim.EnterWriteLock 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 Schreibmodus einzugeben.
public:
void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Ausnahmen
Die RecursionPolicy Eigenschaft ist NoRecursion und der aktuelle Thread hat die Sperre bereits in einen beliebigen Modus eingegeben.
-oder-
Der aktuelle Thread hat den Lesemodus eingegeben und besitzt noch keine Schreibsperre, sodass der Versuch, die Sperre in den Schreibmodus einzugeben, die Möglichkeit eines Deadlocks erzeugen würde.
-oder-
Die Rekursionszahl würde die Kapazität des Zählers überschreiten. Der Grenzwert ist so groß, dass Anwendungen niemals darauf stoßen sollten.
Das ReaderWriterLockSlim Objekt wurde verworfen.
Beispiele
Das folgende Beispiel zeigt, wie Sie die EnterWriteLock Methode verwenden, um die Sperre in den Schreibmodus einzugeben. Die im Beispiel gezeigte Methode fügt dem synchronisierten Cache ein neues Schlüssel-Wert-Paar hinzu. Wenn sich der Schlüssel bereits im Cache befindet, kann die vom inneren Dictionary<TKey,TValue> Ausgelöste Ausnahme die Methode beenden. Zum Ausführen der ExitWriteLock Methode wird ein finally Block verwendet, um sicherzustellen, dass der Aufrufer den Schreibmodus 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 void Add(int key, string value)
{
cacheLock.EnterWriteLock();
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
cacheLock.EnterWriteLock()
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
End Sub
Hinweise
Diese Methode blockiert, bis der aufrufende Thread die Sperre eingibt und daher möglicherweise nie zurückgegeben wird. Verwenden Sie die TryEnterWriteLock Methode, um für ein angegebenes Intervall zu blockieren, und geben Sie dann zurück, wenn der aufrufende Thread während dieses Intervalls keinen Schreibmodus eingegeben hat.
Wenn andere Threads die Sperre im Lesemodus eingegeben haben, wird ein Thread, der die EnterWriteLock Methodenblöcke aufruft, bis diese Threads den Lesemodus beendet haben. Wenn Threads vorhanden sind, die auf den Schreibmodus warten, haben zusätzliche Threads, die versuchen, in den Lesemodus zu wechseln oder den Upgrademodus zu blockieren, bis alle Threads, die auf den Schreibmodus warten, entweder timeout oder in den Schreibmodus eingegeben und dann beendet wurden.
Note
Wenn eine Sperre Rekursion zulässt, kann ein Thread, der die Sperre in den Schreibmodus eingegeben hat, rekursiv in den Schreibmodus wechseln, auch wenn andere Threads darauf warten, in den Schreibmodus zu wechseln.