ReaderWriterLockSlim.EnterReadLock Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.
Objekt ReaderWriterLockSlim byl odstraněn.
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í.