ReaderWriterLock.AcquireWriterLock Yöntem

Tanım

Yazar kilidini alır.

Aşırı Yüklemeler

AcquireWriterLock(Int32)

Zaman aşımı için bir Int32 değer kullanarak yazıcı kilidini alır.

AcquireWriterLock(TimeSpan)

Zaman aşımı için bir TimeSpan değer kullanarak yazıcı kilidini alır.

AcquireWriterLock(Int32)

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

Zaman aşımı için bir Int32 değer kullanarak yazıcı kilidini alır.

public:
 void AcquireWriterLock(int millisecondsTimeout);
public void AcquireWriterLock (int millisecondsTimeout);
member this.AcquireWriterLock : int -> unit
Public Sub AcquireWriterLock (millisecondsTimeout As Integer)

Parametreler

millisecondsTimeout
Int32

Milisaniye cinsinden zaman aşımı.

Özel durumlar

timeout kilit isteği verilmeden önce sona erer.

Örnekler

Aşağıdaki kod örneği, yazıcı 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 the writer lock, and
// how to handle time-outs.
static void WriteToResource( Random^ rnd, int timeOut )
{
   try
   {
      rwl->AcquireWriterLock( timeOut );
      try
      {

         // It is safe for this thread to read or write
         // from the shared resource.
         resource = rnd->Next( 500 );
         Display( String::Format( "writes resource value {0}", resource ) );
         Interlocked::Increment( writes );
      }
      finally
      {

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

   }
   catch ( ApplicationException^ )
   {

      // The writer lock request timed out.
      Interlocked::Increment( writerTimeouts );
   }

}
// Request and release the writer lock, and handle time-outs.
static void WriteToResource(Random rnd, int timeOut)
{
   try {
      rwl.AcquireWriterLock(timeOut);
      try {
         // It's safe for this thread to access from the shared resource.
         resource = rnd.Next(500);
         Display("writes resource value " + resource);
         Interlocked.Increment(ref writes);
      }
      finally {
         // Ensure that the lock is released.
         rwl.ReleaseWriterLock();
      }
   }
   catch (ApplicationException) {
      // The writer lock request timed out.
      Interlocked.Increment(ref writerTimeouts);
   }
}
' Request and release the writer lock, and handle time-outs.
Sub WriteToResource(rnd As Random, timeOut As Integer)
   Try
      rwl.AcquireWriterLock(timeOut)
      Try
         ' It's safe for this thread to read or write from the shared resource.
         resource = rnd.Next(500)
         Display("writes resource value " & resource)
         Interlocked.Increment(writes)
      Finally
         ' Ensure that the lock is released.
         rwl.ReleaseWriterLock()
      End Try
   Catch ex As ApplicationException
      ' The writer lock request timed out.
      Interlocked.Increment(writerTimeouts)
   End Try
End Sub
};
}
End Module

Açıklamalar

Bu yöntem, başka bir iş parçacığının okuyucu kilidi veya yazıcı kilidi olup olmadığını engeller. Yazıcı kilidinin birden çok eşzamanlı okuyucu kilidiyle nasıl alternatif olduğunu açıklayan bir açıklama için sınıfına ReaderWriterLock bakın.

Zaten okuyucu kilidi olan bir iş parçacığı yazıcı kilidini iki yoldan biriyle alabilir: çağrısı AcquireWriterLockyapmadan önce okuyucu kilidini serbest bırakarak veya çağırarak UpgradeToWriterLock.

Dikkat

Bir iş parçacığı hala okuyucu kilidine sahipken çağırırsa AcquireWriterLock , kendi okuyucu kilidinde engeller; sonsuz bir zaman aşımı belirtilirse, iş parçacığı kilitlenmeye neden olur. Bu tür kilitlenmeleri önlemek için, geçerli iş parçacığının zaten bir okuyucu kilidi olup olmadığını belirlemek için kullanın IsReaderLockHeld .

AcquireWriterLock özyinelemeli yazıcı-kilit isteklerini destekler. Başka bir ifadeyle, bir iş parçacığı birden çok kez çağrı AcquireWriterLock yapabilir ve bu da kilit sayısını her seferinde artırır. çağrısı yaptığınızda için bir kez aramanız ReleaseWriterLockAcquireWriterLockgerekir. 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ığı yazıcı kuyruğuna yerleştirilmeden her zaman hemen verilir.

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

Ayrıca bkz.

Şunlara uygulanır

AcquireWriterLock(TimeSpan)

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

Zaman aşımı için bir TimeSpan değer kullanarak yazıcı kilidini alır.

public:
 void AcquireWriterLock(TimeSpan timeout);
public void AcquireWriterLock (TimeSpan timeout);
member this.AcquireWriterLock : TimeSpan -> unit
Public Sub AcquireWriterLock (timeout As TimeSpan)

Parametreler

timeout
TimeSpan

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

Özel durumlar

timeout kilit isteği verilmeden önce sona erer.

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

Açıklamalar

Bu yöntem, başka bir iş parçacığının okuyucu kilidi veya yazıcı kilidi olup olmadığını engeller. Yazıcı kilidinin birden çok eşzamanlı okuyucu kilidiyle nasıl alternatif olduğunu açıklayan bir açıklama için sınıfına ReaderWriterLock bakın.

Zaten okuyucu kilidi olan bir iş parçacığı yazıcı kilidini iki yoldan biriyle alabilir: çağrısı AcquireWriterLockyapmadan önce okuyucu kilidini serbest bırakarak veya çağırarak UpgradeToWriterLock.

Dikkat

Bir iş parçacığı hala okuyucu kilidine sahipken çağırırsa AcquireWriterLock , kendi okuyucu kilidinde engeller; sonsuz bir zaman aşımı belirtilirse, iş parçacığı kilitlenmeye neden olur. Bu tür kilitlenmeleri önlemek için, geçerli iş parçacığının zaten bir okuyucu kilidi olup olmadığını belirlemek için kullanın IsReaderLockHeld .

AcquireWriterLock özyinelemeli yazıcı-kilit isteklerini destekler. Başka bir ifadeyle, bir iş parçacığı birden çok kez çağrı AcquireWriterLock yapabilir ve bu da kilit sayısını her seferinde artırır. çağrısı yaptığınızda için bir kez aramanız ReleaseWriterLockAcquireWriterLockgerekir. 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ığı yazıcı kuyruğuna yerleştirilmeden her zaman hemen verilir.

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

Ayrıca bkz.

Şunlara uygulanır