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 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.