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.

public:
 void AcquireReaderLock(int millisecondsTimeout);
public void AcquireReaderLock (int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock (int millisecondsTimeout);
member this.AcquireReaderLock : int -> unit
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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ğ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.

// The complete code is located in the ReaderWriterLock
// class topic.
using namespace System;
using namespace System::Threading;
public ref class Test
{
public:

   // Declaring the ReaderWriterLock at the class level
   // makes it visible to all threads.
   static ReaderWriterLock^ rwl = gcnew ReaderWriterLock;

   // For this example, the shared resource protected by the
   // ReaderWriterLock is just an integer.
   static int resource = 0;
// 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
// Shows how to request and release a reader lock, and
// how to 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( String::Format( "reads resource value {0}", resource ) );
         Interlocked::Increment( reads );
      }
      finally
      {

         // Ensure that the lock is released.
         rwl->ReleaseReaderLock();
      }

   }
   catch ( ApplicationException^ )
   {

      // The reader lock request timed out.
      Interlocked::Increment( readerTimeouts );
   }

}
// 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ı 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

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.

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

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