Aracılığıyla paylaş


ReaderWriterLockSlim.EnterWriteLock Yöntem

Tanım

Yazma modunda kilidi girmeye çalışır.

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

Özel durumlar

RecursionPolicy özelliğidir NoRecursion ve geçerli iş parçacığı zaten herhangi bir modda kilide girmiştir.

-veya-

Geçerli iş parçacığı okuma moduna girmiş ve zaten yazma kilidine sahip değil, bu nedenle yazma modunda kilidi girmeye çalışmak kilitlenme olasılığına neden olabilir.

-veya-

Özyineleme numarası sayacın kapasitesini aşabilir. Sınır o kadar büyük ki uygulamalar hiçbir zaman bu sınırla karşılaşmamalıdır.

Örnekler

Aşağıdaki örnekte, yazma moduna kilit girmek için yönteminin nasıl kullanılacağı EnterWriteLock gösterilmektedir. Örnekte gösterilen yöntem, eşitlenen önbelleğe yeni bir anahtar/değer çifti ekler. Anahtar zaten önbellekteyse, iç Dictionary<TKey,TValue> tarafından oluşan özel durumun yöntemi sonlandırmasına izin verilir. finally Çağıranın yazma modundan ExitWriteLock çıkması 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 void Add(int key, string value)
{
    cacheLock.EnterWriteLock();
    try
    {
        innerCache.Add(key, value);
    }
    finally
    {
        cacheLock.ExitWriteLock();
    }
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
    cacheLock.EnterWriteLock()
    Try
        innerCache.Add(key, value)
    Finally
        cacheLock.ExitWriteLock()
    End Try
End Sub

Açıklamalar

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

Diğer iş parçacıkları kilit okuma moduna girmişse, bu iş parçacıkları okuma modundan çıkana EnterWriteLock kadar yöntemini çağıran bir iş parçacığı engeller. Yazma moduna girmeyi bekleyen iş parçacıkları olduğunda, yazma moduna girmeyi bekleyen tüm iş parçacıkları zaman aşımına uğradı veya yazma moduna girdikten sonra bu moddan çıkılana kadar okuma moduna veya yükseltilebilir mod bloğuna girmeye çalışan ek iş parçacıkları.

Not

Kilit özyinelemeye izin veriyorsa, yazma modunda kilide giren bir iş parçacığı, diğer iş parçacıkları yazma moduna girmeyi bekliyor olsa bile yinelemeli olarak yazma moduna girebilir.

Şunlara uygulanır