ReaderWriterLockSlim.EnterReadLock Metódus

Definíció

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.

A következőre érvényes: