ReaderWriterLock.AcquireReaderLock Метод

Определение

Получает блокировку чтения.

Перегрузки

Имя Описание
AcquireReaderLock(Int32)

Получает блокировку Int32 чтения, используя значение времени ожидания.

AcquireReaderLock(TimeSpan)

Получает блокировку чтения, используя TimeSpan значение времени ожидания.

AcquireReaderLock(Int32)

Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs

Получает блокировку Int32 чтения, используя значение времени ожидания.

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

Параметры

millisecondsTimeout
Int32

Время ожидания в миллисекундах.

Атрибуты

Исключения

millisecondsTimeout истекает до предоставления запроса блокировки.

Примеры

В следующем примере кода показано, как получить и освободить блокировку чтения и как обрабатывать исключение, возникающее при истечении времени ожидания запроса.

Этот код является частью более крупного примера, предоставленного ReaderWriterLock для класса.

// 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
// 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 блокируется, если в другом потоке есть блокировка записи или если по крайней мере один поток ожидает блокировки записи.

Note

Если текущий поток уже имеет блокировку записи, блокировка чтения не будет получена. Вместо этого число блокировок на блокировке записи увеличивается. Это предотвращает блокировку потока на собственной блокировке записи. Результат совпадает с вызовом AcquireWriterLock, и при освобождении блокировки записи требуется дополнительный вызов ReleaseWriterLock .

AcquireReaderLock поддерживает рекурсивные запросы на блокировку чтения. То есть поток может вызывать AcquireReaderLock несколько раз, что увеличивает число блокировок каждый раз. При каждом вызове ReleaseReaderLockнеобходимо вызывать AcquireReaderLock один раз. Кроме того, можно немедленно ReleaseLock уменьшить число блокировок до нуля.

Запросы рекурсивной блокировки всегда предоставляются немедленно, не помещая поток запроса в очередь чтения. Используйте рекурсивные блокировки с осторожностью, чтобы избежать блокировки записи в течение длительных периодов.

Допустимые значения времени ожидания см. в разделе ReaderWriterLock.

См. также раздел

Применяется к

AcquireReaderLock(TimeSpan)

Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs
Исходный код:
ReaderWriterLock.cs

Получает блокировку чтения, используя TimeSpan значение времени ожидания.

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

Параметры

timeout
TimeSpan

Указание TimeSpan периода ожидания.

Атрибуты

Исключения

timeout истекает до предоставления запроса блокировки.

timeout указывает отрицательное значение, отличное от -1 миллисекунда.

Комментарии

AcquireReaderLock блокируется, если в другом потоке есть блокировка записи или если по крайней мере один поток ожидает блокировки записи.

Note

Если текущий поток уже имеет блокировку записи, блокировка чтения не будет получена. Вместо этого число блокировок на блокировке записи увеличивается. Это предотвращает блокировку потока на собственной блокировке записи. Результат совпадает с вызовом AcquireWriterLock, и при освобождении блокировки записи требуется дополнительный вызов ReleaseWriterLock .

AcquireReaderLock поддерживает рекурсивные запросы на блокировку чтения. То есть поток может вызывать AcquireReaderLock несколько раз, что увеличивает число блокировок каждый раз. При каждом вызове ReleaseReaderLockнеобходимо вызывать AcquireReaderLock один раз. Кроме того, можно немедленно ReleaseLock уменьшить число блокировок до нуля.

Запросы рекурсивной блокировки всегда предоставляются немедленно, не помещая поток запроса в очередь чтения. Используйте рекурсивные блокировки с осторожностью, чтобы избежать блокировки записи в течение длительных периодов.

Допустимые значения времени ожидания см. в разделе ReaderWriterLock.

См. также раздел

Применяется к