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 już wprowadził blokadę 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 wątek wywołujący nie wprowadził trybu zapisu.

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. Jeśli istnieją wątki oczekujące na wejście w tryb zapisu, dodatkowe wątki, które próbują wejść w tryb odczytu lub bloku trybu uaktualniania, dopóki wszystkie wątki oczekujące na wejście w tryb zapisu upłynął limit czasu lub wszedł do trybu zapisu, a następnie wyszedł z niego.

Note

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

Dotyczy