ReaderWriterLockSlim.EnterWriteLock Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.