ReaderWriterLock.AcquireReaderLock 메서드

정의

판독기 잠금을 가져옵니다.Acquires a reader lock.

오버로드

AcquireReaderLock(Int32)

제한 시간에 Int32 값을 사용하여 판독기 잠금을 가져옵니다.Acquires a reader lock, using an Int32 value for the time-out.

AcquireReaderLock(TimeSpan)

제한 시간에 TimeSpan 값을 사용하여 판독기 잠금을 가져옵니다.Acquires a reader lock, using a TimeSpan value for the time-out.

AcquireReaderLock(Int32)

제한 시간에 Int32 값을 사용하여 판독기 잠금을 가져옵니다.Acquires a reader lock, using an Int32 value for the time-out.

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

매개 변수

millisecondsTimeout
Int32

제한 시간(밀리초)입니다.The time-out in milliseconds.

예외

잠금 요청이 부여되기 전에 millisecondsTimeout이 만료된 경우millisecondsTimeout expires before the lock request is granted.

예제

다음 코드 예제에서는 판독기 잠금을 획득 하 고 해제 하는 방법과 요청 시간이 초과 될 때 throw 되는 예외를 처리 하는 방법을 보여 줍니다.The following code example shows how to acquire and release a reader lock, and how to handle the exception thrown when a request times out.

이 코드는 클래스에 대해 제공 된 더 큰 예제의 일부입니다 ReaderWriterLock .This code is part of a larger example provided for the ReaderWriterLock class.

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

설명

AcquireReaderLock 다른 스레드에 작성기 잠금이 있으면이 고, 하나 이상의 스레드가 기록기 잠금을 대기 중인 경우에는입니다.AcquireReaderLock blocks if a different thread has the writer lock, or if at least one thread is waiting for the writer lock.

참고

현재 스레드에 이미 작성기 잠금이 있는 경우 판독기 잠금을 획득 하지 않습니다.If the current thread already has the writer lock, no reader lock is acquired. 대신 기록기 잠금의 잠금 수가 증가 합니다.Instead, the lock count on the writer lock is incremented. 이렇게 하면 스레드가 자체 작성기 잠금을 차단 하지 않습니다.This prevents a thread from blocking on its own writer lock. 결과는를 호출 하는 것과 정확히 같으며 AcquireWriterLock 작성기 잠금을 해제할 때에 대 한 추가 호출이 ReleaseWriterLock 필요 합니다.The result is exactly the same as calling AcquireWriterLock, and an additional call to ReleaseWriterLock is required when releasing the writer lock.

AcquireReaderLock 는 재귀적 판독기 잠금 요청을 지원 합니다.AcquireReaderLock supports recursive reader-lock requests. 즉, 스레드는 매번 잠금 수를 증가 시키는 AcquireReaderLock을 여러 번 호출할 수 있습니다.That is, a thread can call AcquireReaderLock multiple times, which increments the lock count each time. 를 호출할 때마다 한 번씩 호출 해야 합니다 ReleaseReaderLock AcquireReaderLock .You must call ReleaseReaderLock once for each time you call AcquireReaderLock. 또는를 호출 하 여 ReleaseLock 잠금 수를 즉시 0으로 줄일 수 있습니다.Alternatively, you can call ReleaseLock to reduce the lock count to zero immediately.

재귀적 잠금 요청은 요청 스레드를 판독기 큐에 배치 하지 않고 항상 즉시 부여 됩니다.Recursive lock requests are always granted immediately, without placing the requesting thread in the reader queue. 짧은 기간 동안 기록기 잠금 요청을 차단 하지 않도록 재귀 잠금을 주의 해 서 사용 합니다.Use recursive locks with caution, to avoid blocking writer-lock requests for long periods.

유효한 제한 시간 값은을 참조 하십시오 ReaderWriterLock .For valid time-out values, see ReaderWriterLock.

적용 대상

AcquireReaderLock(TimeSpan)

제한 시간에 TimeSpan 값을 사용하여 판독기 잠금을 가져옵니다.Acquires a reader lock, using a TimeSpan value for the time-out.

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

매개 변수

timeout
TimeSpan

제한 시간을 지정하는 TimeSpan입니다.A TimeSpan specifying the time-out period.

예외

잠금 요청이 부여되기 전에 timeout이 만료된 경우timeout expires before the lock request is granted.

timeout이 -1밀리초 이외의 음수 값을 지정하는 경우timeout specifies a negative value other than -1 milliseconds.

설명

AcquireReaderLock 다른 스레드에 작성기 잠금이 있으면이 고, 하나 이상의 스레드가 기록기 잠금을 대기 중인 경우에는입니다.AcquireReaderLock blocks if a different thread has the writer lock, or if at least one thread is waiting for the writer lock.

참고

현재 스레드에 이미 작성기 잠금이 있는 경우 판독기 잠금을 획득 하지 않습니다.If the current thread already has the writer lock, no reader lock is acquired. 대신 기록기 잠금의 잠금 수가 증가 합니다.Instead, the lock count on the writer lock is incremented. 이렇게 하면 스레드가 자체 작성기 잠금을 차단 하지 않습니다.This prevents a thread from blocking on its own writer lock. 결과는를 호출 하는 것과 정확히 같으며 AcquireWriterLock 작성기 잠금을 해제할 때에 대 한 추가 호출이 ReleaseWriterLock 필요 합니다.The result is exactly the same as calling AcquireWriterLock, and an additional call to ReleaseWriterLock is required when releasing the writer lock.

AcquireReaderLock 는 재귀적 판독기 잠금 요청을 지원 합니다.AcquireReaderLock supports recursive reader-lock requests. 즉, 스레드는 매번 잠금 수를 증가 시키는 AcquireReaderLock을 여러 번 호출할 수 있습니다.That is, a thread can call AcquireReaderLock multiple times, which increments the lock count each time. 를 호출할 때마다 한 번씩 호출 해야 합니다 ReleaseReaderLock AcquireReaderLock .You must call ReleaseReaderLock once for each time you call AcquireReaderLock. 또는를 호출 하 여 ReleaseLock 잠금 수를 즉시 0으로 줄일 수 있습니다.Alternatively, you can call ReleaseLock to reduce the lock count to zero immediately.

재귀적 잠금 요청은 요청 스레드를 판독기 큐에 배치 하지 않고 항상 즉시 부여 됩니다.Recursive lock requests are always granted immediately, without placing the requesting thread in the reader queue. 짧은 기간 동안 기록기 잠금 요청을 차단 하지 않도록 재귀 잠금을 주의 해 서 사용 합니다.Use recursive locks with caution, to avoid blocking writer-lock requests for long periods.

유효한 제한 시간 값은을 참조 하십시오 ReaderWriterLock .For valid time-out values, see ReaderWriterLock.

적용 대상