Freigeben über


ReaderWriterLockSlim.EnterWriteLock Methode

Definition

Versucht, die Sperre im Schreibmodus zu erhalten.

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

Ausnahmen

Die RecursionPolicy-Eigenschaft ist NoRecursion, und dem aktuellen Thread wurde die Sperre bereits in einem der Modi zugewiesen.

- oder -

Der aktuelle Thread befindet sich im Lesemodus und besitzt noch keine Schreibsperre, sodass durch eine Zuweisung des Schreibmodus die Möglichkeit eines Deadlocks entstehen würde.

- oder -

Die Anzahl von Rekursionen würde die Kapazität des Zählers überschreiten. Die Kapazität ist so groß, dass Anwendungen diese Grenze niemals erreichen dürften.

Das ReaderWriterLockSlim -Objekt wurde verworfen.

Beispiele

Das folgende Beispiel zeigt, wie Sie die EnterWriteLock -Methode verwenden, um die Sperre im Schreibmodus zu öffnen. 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. Ein finally -Block wird verwendet, um die ExitWriteLock -Methode auszuführen, um sicherzustellen, dass der Aufrufer den Schreibmodus 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 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 in die Sperre eintritt, und gibt daher möglicherweise nie zurück. 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 nicht in den Schreibmodus gewechselt ist.

Wenn andere Threads im Lesemodus in die Sperre gewechselt sind, blockiert ein Thread, der die EnterWriteLock -Methode aufruft, bis diese Threads den Lesemodus beendet haben. Wenn Threads darauf warten, in den Schreibmodus zu wechseln, blockieren zusätzliche Threads, die versuchen, in den Lesemodus oder in den upgradebaren Modus zu wechseln, bis alle Threads, die auf den Schreibmodus warten, entweder ein Timeout oder ein Wechsel in den Schreibmodus erfolgt ist und dann beendet wurde.

Hinweis

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

Gilt für: