ReaderWriterLock.AcquireReaderLock Yöntem

Tanım

Okuyucu kilidi alır.

Aşırı Yüklemeler

Name Description
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
Kaynak:
ReaderWriterLock.cs
Kaynak:
ReaderWriterLock.cs

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

public:
 void AcquireReaderLock(int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(int millisecondsTimeout);
public void AcquireReaderLock(int millisecondsTimeout);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.AcquireReaderLock : int -> unit
member this.AcquireReaderLock : int -> unit
Public Sub AcquireReaderLock (millisecondsTimeout As Integer)

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ğinde bir okuyucu kilidinin nasıl alınıp serbest bırakıldığı ve istek zaman aşımına uğradıklarında oluşan özel durumun nasıl işleneceğini gösterilmektedir.

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

// 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;
' The complete code is located in the ReaderWriterLock class topic.
Imports System.Threading

Public Module Example
   Private rwl As New ReaderWriterLock()
   ' Define the shared resource protected by the ReaderWriterLock.
   Private resource As Integer = 0
// 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);
   }
}
' Request and release a reader lock, and handle time-outs.
Sub ReadFromResource(timeOut As Integer)
   Try
      rwl.AcquireReaderLock(timeOut)
      Try
         ' It's safe for this thread to read from the shared resource.
         Display("reads resource value " & resource)
         Interlocked.Increment(reads)
      Finally
         ' Ensure that the lock is released.
         rwl.ReleaseReaderLock()
      End Try
   Catch ex As ApplicationException
      ' The reader lock request timed out.
      Interlocked.Increment(readerTimeouts)
   End Try
End Sub
}
End Module

Açıklamalar

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

Note

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 engeller. 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 her seferinde kilit sayısını artırır. her çağırışınızda bir kez aramanız ReleaseReaderLockAcquireReaderLockgerekir. Alternatif olarak, kilit sayısını hemen sıfıra düşürmek için çağırabilirsiniz ReleaseLock .

Özyinelemeli kilit istekleri, istekte bulunan iş parçacığı okuyucu kuyruğuna yerleştirilmeden her zaman hemen verilir. Uzun süreler boyunca yazıcı kilidi isteklerini engellememek için özyinelemeli kilitleri dikkatli kullanın.

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

Ayrıca bkz.

Şunlara uygulanır

AcquireReaderLock(TimeSpan)

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

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

public:
 void AcquireReaderLock(TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(TimeSpan timeout);
public void AcquireReaderLock(TimeSpan timeout);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.AcquireReaderLock : TimeSpan -> unit
member this.AcquireReaderLock : TimeSpan -> unit
Public Sub AcquireReaderLock (timeout As TimeSpan)

Parametreler

timeout
TimeSpan

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

Ö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ı kilidini en az bir iş parçacığı bekliyorsa bloklar.

Note

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 engeller. 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 her seferinde kilit sayısını artırır. her çağırışınızda bir kez aramanız ReleaseReaderLockAcquireReaderLockgerekir. Alternatif olarak, kilit sayısını hemen sıfıra düşürmek için çağırabilirsiniz ReleaseLock .

Özyinelemeli kilit istekleri, istekte bulunan iş parçacığı okuyucu kuyruğuna yerleştirilmeden her zaman hemen verilir. Uzun süreler boyunca yazıcı kilidi isteklerini engellememek için özyinelemeli kilitleri dikkatli kullanın.

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

Ayrıca bkz.

Şunlara uygulanır