Udostępnij za pośrednictwem


ReaderWriterLockSlim.EnterReadLock Metoda

Definicja

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

Dotyczy