ReaderWriterLockSlim.EnterReadLock 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 odczytu.
public:
void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Wyjątki
Właściwość RecursionPolicy to NoRecursion, a bieżący wątek próbował uzyskać blokadę odczytu, gdy już przechowuje blokadę odczytu.
-lub-
Właściwość RecursionPolicy to NoRecursion, a bieżący wątek próbował uzyskać blokadę odczytu, gdy już przechowuje blokadę zapisu.
-lub-
Liczba rekursji przekroczyłaby pojemność licznika. Ten limit jest tak duży, że aplikacje nigdy nie powinny napotkać tego wyjątku.
Obiekt ReaderWriterLockSlim został usunięty.
Przykłady
W poniższym przykładzie pokazano, jak za pomocą EnterReadLock metody wprowadzić blokadę w trybie odczytu. Metoda pokazana w przykładzie pobiera wartość skojarzona z kluczem. Jeśli klucz nie zostanie znaleziony, wyjątek zgłoszony przez wewnętrzny Dictionary<TKey,TValue> może zakończyć metodę. Blok finally
służy do wykonywania ExitReadLock metody, zapewniając, że obiekt wywołujący kończy tryb odczytu.
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 string Read(int key)
{
cacheLock.EnterReadLock();
try
{
return innerCache[key];
}
finally
{
cacheLock.ExitReadLock();
}
}
Public Function Read(ByVal key As Integer) As String
cacheLock.EnterReadLock()
Try
Return innerCache(key)
Finally
cacheLock.ExitReadLock()
End Try
End Function
Uwagi
Ta metoda blokuje, dopóki wątek wywołujący nie wejdzie do blokady i dlatego nigdy nie powróci. TryEnterReadLock Użyj metody , aby zablokować określony interwał, a następnie zwrócić, jeśli w tym interwale nie wprowadzono trybu odczytu wywołującego wątku.
Wiele wątków może jednocześnie wejść w tryb odczytu.
Jeśli co najmniej jeden wątek oczekuje na wejście w tryb zapisu, wątek, który wywołuje EnterReadLock bloki metody, dopóki te wątki nie upłynął limit czasu lub wszedł do trybu zapisu, a następnie wyszedł z niego.
Uwaga
Jeśli blokada zezwala na rekursję, wątek, który wprowadził blokadę w trybie odczytu, może przechodzić w tryb odczytu rekursywnie, nawet jeśli inne wątki oczekują na tryb zapisu.
Co najwyżej jeden wątek może być w trybie uaktualniania, podczas gdy inne wątki są w trybie odczytu. Jeśli dodatkowe wątki czekają na przejście w tryb uaktualniania i nie ma wątków oczekujących na przejście do trybu zapisu, wątki wywołujące EnterReadLock metodę wchodzą w tryb odczytu natychmiast i nie blokują.