ReaderWriterLockSlim.EnterReadLock Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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.