Udostępnij za pośrednictwem


ReaderWriterLockSlim.EnterWriteLock Metoda

Definicja

Próbuje wprowadzić blokadę w trybie zapisu.

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

Wyjątki

Właściwość RecursionPolicy jest NoRecursion i bieżący wątek został już wprowadzony blokada w dowolnym trybie.

-lub-

Bieżący wątek został wprowadzony w tryb odczytu i nie jest jeszcze właścicielem blokady zapisu, więc próba wprowadzenia blokady w trybie zapisu spowoduje możliwość zakleszczenia.

-lub-

Liczba rekursji przekroczy pojemność licznika. Limit jest tak duży, że aplikacje nigdy nie powinny go napotkać.

Obiekt ReaderWriterLockSlim został usunięty.

Przykłady

W poniższym przykładzie pokazano, jak za pomocą EnterWriteLock metody wprowadzić blokadę w trybie zapisu. Metoda pokazana w przykładzie dodaje nową parę klucz/wartość do zsynchronizowanej pamięci podręcznej. Jeśli klucz znajduje się już w pamięci podręcznej, wyjątek zgłoszony przez wewnętrzny Dictionary<TKey,TValue> może zakończyć metodę. Blok finally służy do wykonywania ExitWriteLock metody, zapewniając, że obiekt wywołujący kończy tryb zapisu.

Ten kod jest częścią większego przykładu udostępnionego ReaderWriterLockSlim dla klasy.

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

Uwagi

Ta metoda blokuje, dopóki wątek wywołujący nie wejdzie w blokadę i dlatego nigdy nie powróci. TryEnterWriteLock Użyj metody , aby zablokować określony interwał, a następnie zwrócić, jeśli w tym interwale nie wprowadzono trybu zapisu wywołującego wątku.

Jeśli inne wątki zostały wprowadzone w trybie odczytu, wątek, który wywołuje EnterWriteLock bloki metody, dopóki te wątki nie zakończą trybu odczytu. Gdy istnieją wątki oczekujące na wprowadzenie trybu zapisu, dodatkowe wątki, które próbują wprowadzić tryb odczytu lub blok trybu uaktualniania, dopóki wszystkie wątki oczekujące na wejście w tryb zapisu upłynął limit czasu lub wprowadzono tryb zapisu, a następnie wyjść z niego.

Uwaga

Jeśli blokada zezwala na rekursję, wątek, który wprowadził blokadę w trybie zapisu, może przechodzić w tryb zapisu cyklicznie, nawet jeśli inne wątki czekają na tryb zapisu.

Dotyczy