Sdílet prostřednictvím


ReaderWriterLockSlim.EnterReadLock Metoda

Definice

Pokusí se vstoupit do zámku v režimu čtení.

public:
 void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()

Výjimky

Vlastnost RecursionPolicy je NoRecursiona aktuální vlákno se pokusilo získat zámek čtení, když už zámek čtení obsahuje.

-nebo-

Vlastnost RecursionPolicy je NoRecursiona aktuální vlákno se pokusilo získat zámek čtení, když už zámek zápisu obsahuje.

-nebo-

Číslo rekurze by překročilo kapacitu čítače. Tento limit je tak velký, že by se aplikace s touto výjimkou nikdy neměly setkat.

Příklady

Následující příklad ukazuje, jak použít metodu EnterReadLock k zadání zámku v režimu čtení. Metoda zobrazená v příkladu načte hodnotu přidruženou ke klíči. Pokud klíč není nalezen, výjimka vyvolaná vnitřní Dictionary<TKey,TValue> je povoleno ukončit metodu. K finally provedení ExitReadLock metody se používá blok, který zajišťuje, že volající ukončí režim čtení.

Tento kód je součástí většího příkladu ReaderWriterLockSlim , který je k dispozici pro třídu.

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

Poznámky

Tato metoda blokuje, dokud volající vlákno nevstoupí do zámku, a proto se nemusí nikdy vrátit. Použijte metodu TryEnterReadLock k blokování po zadaný interval a pak se vraťte, pokud volající vlákno nevstoupilo do režimu čtení během tohoto intervalu.

Více vláken může přejít do režimu čtení najednou.

Pokud jedno nebo více vláken čeká na vstup do režimu zápisu, vlákno, které volá EnterReadLock metodové bloky, dokud tato vlákna nevypnou časový limit nebo nepřejdou do režimu zápisu a pak se z něj ukončí.

Poznámka

Pokud zámek umožňuje rekurzi, vlákno, které zadalo zámek v režimu čtení, může přejít do režimu čtení rekurzivně, i když jiná vlákna čekají na vstup do režimu zápisu.

Maximálně jedno vlákno může být v upgradovatelném režimu, zatímco ostatní vlákna jsou v režimu čtení. Pokud další vlákna čekají na přechod do upgradovatelného režimu a neexistují žádná vlákna čekající na přechod do režimu zápisu, vlákna, která volají metodu EnterReadLock , okamžitě přejdou do režimu čtení a neblokují se.

Platí pro