ReaderWriterLockSlim.EnterReadLock Metod

Definition

Försöker ange låset i läsläge.

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

Undantag

Egenskapen RecursionPolicy är NoRecursion, och den aktuella tråden har försökt hämta läslåset när det redan innehåller läslåset.

-eller-

Egenskapen RecursionPolicy är NoRecursion, och den aktuella tråden har försökt hämta läslåset när det redan innehåller skrivlåset.

-eller-

Rekursionsnumret skulle överskrida räknarens kapacitet. Den här gränsen är så stor att program aldrig får stöta på det här undantaget.

Objektet ReaderWriterLockSlim har tagits bort.

Exempel

I följande exempel visas hur du använder EnterReadLock metoden för att ange låset i läsläge. Metoden som visas i exemplet hämtar värdet som är associerat med en nyckel. Om nyckeln inte hittas tillåts undantaget som genereras av det inre Dictionary<TKey,TValue> att avsluta metoden. Ett finally block används för att köra ExitReadLock metoden, vilket säkerställer att anroparen avslutar läsläget.

Den här koden är en del av ett större exempel som tillhandahålls ReaderWriterLockSlim för klassen.

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

Kommentarer

Den här metoden blockerar tills den anropande tråden kommer in i låset och därför kanske aldrig kommer tillbaka. TryEnterReadLock Använd metoden för att blockera för ett angivet intervall och returnera sedan om den anropande tråden inte har angett läsläge under det intervallet.

Flera trådar kan ange läsläge samtidigt.

Om en eller flera trådar väntar på att gå in i skrivläge blockerar en tråd som anropar metodblocken EnterReadLock tills dessa trådar antingen har överskridit tidsgränsen eller gått in i skrivläge och sedan avslutat den.

Note

Om ett lås tillåter rekursion kan en tråd som har gått in i låset i läsläge ange läsläge rekursivt, även om andra trådar väntar på att gå in i skrivläge.

Som mest kan en tråd vara i uppgraderingsbart läge medan andra trådar är i läsläge. Om ytterligare trådar väntar på att gå in i uppgraderingsbart läge, och det inte finns några trådar som väntar på att gå in i skrivläge, går trådar som anropar EnterReadLock metoden till läsläge omedelbart och blockerar inte.

Gäller för