ReaderWriterLockSlim.EnterWriteLock Metoda

Definice

Pokusí se vstoupit do zámku 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 zámek v libovolném režimu.

nebo

Aktuální vlákno vstoupilo 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 zablokování.

nebo

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

Příklady

Následující příklad ukazuje, jak pomocí EnterWriteLock metody zadat zámek v režimu zápisu. Metoda zobrazená v příkladu přidá do synchronizované mezipaměti novou dvojici klíč/hodnota. Pokud je klíč již v mezipaměti, výjimka vyvolaná vnitřním Dictionary<TKey,TValue> objektem je povolena ukončit metodu. Blok finally se používá ke spuštění ExitWriteLock metody a zajišťuje, že volající ukončí režim zápisu.

Tento kód je součástí většího příkladu poskytovaného 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 nezadá zámek, a proto se nikdy nevrátí. Použijte metodu TryEnterWriteLock k blokování pro zadaný interval a poté se vraťte, pokud volající vlákno během tohoto intervalu nezadá režim zápisu.

Pokud jiná vlákna zadala zámek v režimu čtení, vlákno, které volá EnterWriteLock metody bloky, dokud tato vlákna neskončí režim čtení. Pokud existují vlákna čekající na vstup do režimu zápisu, další vlákna, která se pokusí přejít do režimu čtení nebo upgradovat režim blok, dokud všechna vlákna čekající na vstup do režimu zápisu buď vypršel časový limit, nebo vstoupil do režimu zápisu a poté se z něj ukončí.

Note

Pokud zámek umožňuje rekurzzi, vlákno, které zadalo zámek v režimu zápisu, může rekurzivně vstoupit do režimu zápisu, i když ostatní vlákna čekají na vstup do režimu zápisu.

Platí pro