ReaderWriterLockSlim.EnterReadLock Methode

Definitie

Probeert de vergrendeling in de leesmodus in te voeren.

public:
 void EnterReadLock();
public void EnterReadLock();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()

Uitzonderingen

De RecursionPolicy eigenschap is NoRecursionen de huidige thread heeft geprobeerd de leesvergrendeling te verkrijgen wanneer deze al de leesvergrendeling bevat.

– of –

De RecursionPolicy eigenschap is NoRecursionen de huidige thread heeft geprobeerd de leesvergrendeling te verkrijgen wanneer deze al de schrijfvergrendeling bevat.

– of –

Het recursienummer overschrijdt de capaciteit van de teller. Deze limiet is zo groot dat toepassingen deze uitzondering nooit mogen tegenkomen.

Het ReaderWriterLockSlim object is verwijderd.

Voorbeelden

In het volgende voorbeeld ziet u hoe u de EnterReadLock methode gebruikt om de vergrendeling in de leesmodus in te voeren. Met de methode die in het voorbeeld wordt weergegeven, wordt de waarde opgehaald die is gekoppeld aan een sleutel. Als de sleutel niet wordt gevonden, mag de uitzondering die door de binnenste Dictionary<TKey,TValue> wordt gegenereerd, de methode beëindigen. Er wordt een finally blok gebruikt om de ExitReadLock methode uit te voeren, zodat de aanroeper de leesmodus verlaat.

Deze code maakt deel uit van een groter voorbeeld voor de ReaderWriterLockSlim klasse.

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

Opmerkingen

Deze methode wordt geblokkeerd totdat de aanroepende thread de vergrendeling binnenkomt en kan daarom nooit terugkeren. Gebruik de TryEnterReadLock methode om te blokkeren voor een opgegeven interval en retourneer vervolgens als de aanroepende thread tijdens dat interval niet in de leesmodus is gegaan.

Meerdere threads kunnen tegelijkertijd de leesmodus openen.

Als een of meer threads wachten om de schrijfmodus in te voeren, wordt een thread die de EnterReadLock methode blokkeert aangeroepen, aangeroepen totdat er een time-out is opgetreden voor deze threads of in de schrijfmodus zijn gegaan en vervolgens worden afgesloten.

Note

Als een vergrendeling recursie toestaat, kan een thread die de vergrendeling in de leesmodus heeft ingevoerd recursief in de leesmodus komen, zelfs als andere threads wachten om de schrijfmodus te openen.

Maximaal één thread kan zich in de upgradebare modus bevinden, terwijl andere threads zich in de leesmodus bevinden. Als er extra threads wachten om de upgradebare modus in te voeren en er geen threads zijn die wachten op het invoeren van de schrijfmodus, worden threads die de EnterReadLock methode aanroepen, onmiddellijk in de leesmodus geactiveerd en worden ze niet geblokkeerd.

Van toepassing op