ReaderWriterLockSlim.EnterReadLock Yöntem

Tanım

Kilidi okuma moduna girmeye çalışır.

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

Özel durumlar

RecursionPolicy özelliğidir NoRecursionve geçerli iş parçacığı okuma kilidini zaten tuttuğunda okuma kilidini almaya çalıştı.

-veya-

RecursionPolicy özelliğidir NoRecursionve geçerli iş parçacığı zaten yazma kilidini barındırdığında okuma kilidini almaya çalıştı.

-veya-

Özyineleme numarası sayacın kapasitesini aşabilir. Bu sınır, uygulamaların hiçbir zaman bu özel durumla karşılaşmaması için çok büyük.

Örnekler

Aşağıdaki örnekte, okuma moduna kilit girmek için yönteminin nasıl kullanılacağı EnterReadLock gösterilmektedir. Örnekte gösterilen yöntem bir anahtarla ilişkili değeri alır. Anahtar bulunamazsa, iç Dictionary<TKey,TValue> tarafından oluşan özel durumun yöntemi sonlandırmasına izin verilir. finally Çağıranın okuma modundan ExitReadLock çıktığından emin olmak için yöntemini yürütmek için bir blok kullanılır.

Bu kod, sınıfı için ReaderWriterLockSlim sağlanan daha büyük bir örneğin parçasıdır.

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

Açıklamalar

Bu yöntem çağıran iş parçacığı kilidi girene kadar engeller ve bu nedenle hiçbir zaman döndürmeyebilir. TryEnterReadLock Belirtilen bir aralığı engellemek için yöntemini kullanın ve ardından çağıran iş parçacığı bu aralık boyunca okuma moduna girmediyse döndürebilirsiniz.

Birden çok iş parçacığı aynı anda okuma moduna girebilir.

Bir veya daha fazla iş parçacığı yazma moduna girmeyi bekliyorsa, yöntemi çağıran EnterReadLock bir iş parçacığı, bu iş parçacıkları zaman aşımına uğradı veya yazma moduna girdikten sonra ondan çıkana kadar bloklar.

Note

Bir kilit özyinelemeye izin veriyorsa, diğer iş parçacıkları yazma moduna girmeyi bekliyor olsa bile, okuma moduna girmiş olan bir iş parçacığı yinelemeli olarak okuma moduna girebilir.

Diğer iş parçacıkları okuma modundayken en fazla bir iş parçacığı yükseltilebilir modda olabilir. Yükseltilebilir moda girmeyi bekleyen başka iş parçacıkları varsa ve yazma moduna girmeyi bekleyen iş parçacığı yoksa, yöntemini çağıran EnterReadLock iş parçacıkları hemen okuma moduna girer ve engellemez.

Şunlara uygulanır