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í, 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.
Objekt ReaderWriterLockSlim byl odstraněn.
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.