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í, pokud již obsahuje zámek čtení.

nebo

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

nebo

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

Příklady

Následující příklad ukazuje, jak pomocí EnterReadLock metody zadat zámek v režimu čtení. Metoda zobrazená v příkladu načte hodnotu přidruženou ke klíči. Pokud se klíč nenajde, je povolena výjimka vyvolaná vnitřní Dictionary<TKey,TValue> metodou ukončit. Blok finally se používá ke spuštění ExitReadLock metody a zajišťuje, že volající ukončí režim čtení.

Tento kód je součástí většího příkladu poskytovaného ReaderWriterLockSlim 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 nezadá zámek, a proto se nikdy nevrátí. Použijte metodu TryEnterReadLock k blokování pro zadaný interval a poté se vraťte, pokud volající vlákno během tohoto intervalu nezadá režim čtení.

Více vláken může současně vstoupit do režimu čtení.

Pokud jedno nebo více vláken čeká na vstup do režimu zápisu, vlákno, které volá EnterReadLock bloky metody, dokud tyto vlákna buď vypršel časový limit, nebo vstoupil do režimu zápisu a poté se z něj ukončí.

Note

Pokud zámek umožňuje rekurze, vlákno, které zadalo zámek v režimu čtení, může rekurzivně vstoupit do režimu čtení, i když ostatní vlákna čekají na vstup do režimu zápisu.

Ve většině případů může být jedno vlákno v režimu upgradu, zatímco ostatní vlákna jsou v režimu čtení. Pokud další vlákna čekají na přechod do režimu upgradu a neexistují žádná vlákna čekající na vstup do režimu zápisu, vlákna, která volají metodu EnterReadLock režim čtení okamžitě a neblokují.

Platí pro