ReaderWriterLock.AcquireReaderLock 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.
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 ReleaseReaderLockAcquireReaderLock
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ığı 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 ReleaseReaderLockAcquireReaderLock
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ığı 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. .