ReaderWriterLock.AcquireWriterLock Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 ReleaseWriterLockAcquireWriterLock
gerekir. 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 ReleaseWriterLockAcquireWriterLock
gerekir. 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. .