İngilizce dilinde oku

Aracılığıyla paylaş


ReaderWriterLock.AcquireReaderLock Yöntem

Tanım

Okuyucu kilidi alır.

Aşırı Yüklemeler

AcquireReaderLock(Int32)

Zaman aşımı için bir değer kullanarak bir Int32 okuyucu kilidi alır.

AcquireReaderLock(TimeSpan)

Zaman aşımı için bir değer kullanarak bir TimeSpan okuyucu kilidi alır.

AcquireReaderLock(Int32)

Kaynak:
ReaderWriterLock.cs
Kaynak:
ReaderWriterLock.cs
Kaynak:
ReaderWriterLock.cs

Zaman aşımı için bir değer kullanarak bir Int32 okuyucu kilidi alır.

C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(int millisecondsTimeout);
C#
public void AcquireReaderLock(int millisecondsTimeout);

Parametreler

millisecondsTimeout
Int32

Milisaniye cinsinden zaman aşımı.

Öznitelikler

Özel durumlar

millisecondsTimeout kilit isteği verilmeden önce sona erer.

Örnekler

Aşağıdaki kod örneği, okuyucu kilidinin nasıl alınıp serbest bırakıldığını ve istek zaman aşımına uğradıklarında oluşan özel durumun nasıl işlendiğini gösterir.

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

C#
// The complete code is located in the ReaderWriterLock class topic.
using System;
using System.Threading;

public class Example
{
   static ReaderWriterLock rwl = new ReaderWriterLock();
   // Define the shared resource protected by the ReaderWriterLock.
   static int resource = 0;
C#
// Request and release a reader lock, and handle time-outs.
static void ReadFromResource(int timeOut)
{
   try {
      rwl.AcquireReaderLock(timeOut);
      try {
         // It is safe for this thread to read from the shared resource.
         Display("reads resource value " + resource);
         Interlocked.Increment(ref reads);
      }
      finally {
         // Ensure that the lock is released.
         rwl.ReleaseReaderLock();
      }
   }
   catch (ApplicationException) {
      // The reader lock request timed out.
      Interlocked.Increment(ref readerTimeouts);
   }
}
C#
}

Açıklamalar

AcquireReaderLock , farklı bir iş parçacığında yazıcı kilidi varsa veya yazıcı kilidi için en az bir iş parçacığı bekliyorsa engeller.

Not

Geçerli iş parçacığında yazıcı kilidi zaten varsa, okuyucu kilidi alınmaz. Bunun yerine, yazıcı kilidindeki kilit sayısı artırılır. Bu, bir iş parçacığının kendi yazıcı kilidinde engellemesini önler. Sonuç, çağrısıyla AcquireWriterLocktam olarak aynıdır ve yazıcı kilidi serbest bırakılırken öğesine ek bir çağrı ReleaseWriterLock yapılması gerekir.

AcquireReaderLock özyinelemeli okuyucu kilitleme isteklerini destekler. Başka bir ifadeyle, bir iş parçacığı AcquireReaderLock'u birden çok kez çağırabilir ve bu da kilit sayısını her seferinde artırır. çağrısı yaptığınızda için bir kez aramanız ReleaseReaderLockAcquireReaderLockgerekir. Alternatif olarak, kilit sayısını hemen sıfıra düşürmek için çağrısı ReleaseLock yapabilirsiniz.

Özyinelemeli kilit istekleri, istekte bulunan iş parçacığı okuyucu kuyruğuna yerleştirilmeden her zaman hemen verilir. Özyinelemeli kilitleri dikkatli bir şekilde kullanarak uzun süreler için yazıcı kilidi isteklerini engelleyin.

Geçerli zaman aşımı değerleri için bkz ReaderWriterLock. .

Ayrıca bkz.

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

AcquireReaderLock(TimeSpan)

Kaynak:
ReaderWriterLock.cs
Kaynak:
ReaderWriterLock.cs
Kaynak:
ReaderWriterLock.cs

Zaman aşımı için bir değer kullanarak bir TimeSpan okuyucu kilidi alır.

C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(TimeSpan timeout);
C#
public void AcquireReaderLock(TimeSpan timeout);

Parametreler

timeout
TimeSpan

TimeSpan Zaman aşımı süresini belirten.

Öznitelikler

Özel durumlar

timeout kilit isteği verilmeden önce sona erer.

timeout -1 milisaniye dışında bir negatif değer belirtir.

Açıklamalar

AcquireReaderLock , farklı bir iş parçacığında yazıcı kilidi varsa veya yazıcı kilidi için en az bir iş parçacığı bekliyorsa engeller.

Not

Geçerli iş parçacığında yazıcı kilidi zaten varsa, okuyucu kilidi alınmaz. Bunun yerine, yazıcı kilidindeki kilit sayısı artırılır. Bu, bir iş parçacığının kendi yazıcı kilidinde engellemesini önler. Sonuç, çağrısıyla AcquireWriterLocktam olarak aynıdır ve yazıcı kilidi serbest bırakılırken öğesine ek bir çağrı ReleaseWriterLock yapılması gerekir.

AcquireReaderLock özyinelemeli okuyucu kilitleme isteklerini destekler. Başka bir ifadeyle, bir iş parçacığı AcquireReaderLock'u birden çok kez çağırabilir ve bu da kilit sayısını her seferinde artırır. çağrısı yaptığınızda için bir kez aramanız ReleaseReaderLockAcquireReaderLockgerekir. Alternatif olarak, kilit sayısını hemen sıfıra düşürmek için çağrısı ReleaseLock yapabilirsiniz.

Özyinelemeli kilit istekleri, istekte bulunan iş parçacığı okuyucu kuyruğuna yerleştirilmeden her zaman hemen verilir. Özyinelemeli kilitleri dikkatli bir şekilde kullanarak uzun süreler için yazıcı kilidi isteklerini engelleyin.

Geçerli zaman aşımı değerleri için bkz ReaderWriterLock. .

Ayrıca bkz.

Şunlara uygulanır

.NET 10 ve diğer sürümler
Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1