Sdílet prostřednictvím


ReaderWriterLockSlim.EnterWriteLock Metoda

Definice

Pokusí se přejít na zámek v režimu zápisu.

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

Výjimky

Vlastnost RecursionPolicy je NoRecursion a aktuální vlákno již vstoupilo do zámku v libovolném režimu.

-nebo-

Aktuální vlákno přešlo do režimu čtení a ještě nevlastní zámek zápisu, takže pokus o vstup do režimu zápisu by vytvořil možnost vzájemného zablokování.

-nebo-

Číslo rekurze by překročilo kapacitu čítače. Limit je tak velký, že by se s ním aplikace nikdy neměly setkat.

Příklady

Následující příklad ukazuje, jak použít metodu EnterWriteLock k zadání zámku v režimu zápisu. Metoda uvedená v příkladu přidá do synchronizované mezipaměti nový pár klíč/hodnota. Pokud je klíč již v mezipaměti, výjimka vyvolaná vnitřním Dictionary<TKey,TValue> objektem může ukončit metodu . Ke finally spuštění ExitWriteLock metody se používá blok, který zajišťuje, že volající ukončí režim zápisu.

Tento kód je součástí většího příkladu ReaderWriterLockSlim pro třídu .

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

Poznámky

Tato metoda blokuje, dokud volající vlákno nevstoupí zámek, a proto se nikdy nemusí vrátit. Použijte metodu TryEnterWriteLock k blokování po zadaný interval a poté vrátit, pokud volající vlákno nevstoupilo do režimu zápisu během tohoto intervalu.

Pokud jiná vlákna vstoupila do zámku v režimu čtení, vlákno, které volá metodu EnterWriteLock blokuje, dokud tato vlákna ukončit režim čtení. Pokud existují vlákna čekající na přechod do režimu zápisu, další vlákna, která se pokusí přejít do režimu čtení nebo upgradovatelného režimu, blokují, dokud všechna vlákna čekající na přechod do režimu zápisu buď vypršel časový limit, nebo přejdou do režimu zápisu a pak se z něj ukončí.

Poznámka

Pokud zámek umožňuje rekurze, vlákno, které vstoupilo do zámku v režimu zápisu, může přejít do režimu zápisu rekurzivně, i když jiná vlákna čekají na vstup do režimu zápisu.

Platí pro