ReaderWriterLockSlim.EnterReadLock Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Olvasási módban próbál meg belépni a zárolásba.
public:
void EnterReadLock();
public void EnterReadLock();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Kivételek
A RecursionPolicy tulajdonság az NoRecursion, és az aktuális szál megkísérelte beolvasni az olvasási zárolást, ha már tartalmazza az olvasási zárolást.
-vagy-
A RecursionPolicy tulajdonság az NoRecursion, és az aktuális szál megkísérelte beolvasni az olvasási zárolást, ha már tartalmazza az írási zárolást.
-vagy-
A rekurziós szám meghaladná a számláló kapacitását. Ez a korlát olyan nagy, hogy az alkalmazások soha nem találkozhatnak ezzel a kivétellel.
Az ReaderWriterLockSlim objektumot megsemmisítették.
Példák
Az alábbi példa bemutatja, hogyan használhatja a metódust a EnterReadLock zárolás olvasási módban való megadására. A példában látható metódus lekéri a kulcshoz társított értéket. Ha a kulcs nem található, a belső Dictionary<TKey,TValue> által kibocsátott kivétel megszakíthatja a metódust. A finally metódus végrehajtásához ExitReadLock blokkot használunk, amely biztosítja, hogy a hívó kilépjen az olvasási módból.
Ez a kód egy nagyobb, az ReaderWriterLockSlim osztályhoz tartozó példa része.
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
Megjegyzések
Ez a metódus letiltja, amíg a hívó szál be nem lép a zárolásba, ezért előfordulhat, hogy soha nem tér vissza. TryEnterReadLock A metódussal letilthat egy megadott időközt, majd visszatérhet, ha a hívó szál nem lépett be olvasási módba az adott időköz alatt.
Egyszerre több szál is beléphet olvasási módba.
Ha egy vagy több szál írási módra vár, egy olyan szál, amely addig blokkolja a EnterReadLock metódusblokkokat, amíg ezek a szálak időtúllépést vagy írási módot nem adnak meg, majd kilépnek belőle.
Note
Ha a zárolás lehetővé teszi a rekurziót, a zárolást olvasási módban beírt szálak rekurzív módon is beírhatják, még akkor is, ha más szálak írási módra várnak.
Legfeljebb egy szál frissíthető módban lehet, míg a többi szál olvasási módban van. Ha további szálak várnak a frissíthető mód megadására, és nincsenek olyan szálak, amelyek írási módba való belépésre várnak, a EnterReadLock metódust meghívó szálak azonnal olvasási módba lépnek, és nem tiltják le.