Aracılığıyla paylaş


ReaderWriterLockSlim.EnterReadLock Yöntem

Tanım

Kilidi okuma modunda 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 tuttuğunda okuma kilidini almaya çalıştı.

-veya-

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

Örnekler

Aşağıdaki örnekte, okuma modunda kilidi 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 olarak 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önmeyebilir. TryEnterReadLock Belirtilen bir aralığı engellemek için yöntemini kullanın ve çağıran iş parçacığı bu aralık boyunca okuma moduna girmediyse döndür.

Aynı anda birden çok iş parçacığı okuma moduna girebilir.

Bir veya daha fazla iş parçacığı yazma moduna girmeyi bekliyorsa, yöntem çağıran EnterReadLock bir iş parçacığı zaman aşımına uğradı veya yazma moduna girip ondan çıkana kadar engeller.

Not

Bir kilit özyinelemeye izin veriyorsa, diğer iş parçacıkları yazma moduna girmeyi beklese 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 girmek için ek iş parçacıkları bekliyorsa 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