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.