ReaderWriterLock.AcquireWriterLock Метод

Определение

Получает блокировку записи.

Перегрузки

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

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

AcquireWriterLock(TimeSpan)

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

AcquireWriterLock(Int32)

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

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

public:
 void AcquireWriterLock(int millisecondsTimeout);
public void AcquireWriterLock(int millisecondsTimeout);
member this.AcquireWriterLock : int -> unit
Public Sub AcquireWriterLock (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 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

Комментарии

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

Поток, который уже имеет блокировку чтения, может получить блокировку записи одним из двух способов: путем выпуска блокировки чтения перед вызовом AcquireWriterLockили путем вызова UpgradeToWriterLock.

Предостережение

Если поток вызывается AcquireWriterLock , пока он по-прежнему имеет блокировку чтения, он блокируется на собственной блокировке чтения; если указано бесконечное время ожидания, поток будет взаимоблокировкой. Чтобы избежать таких взаимоблокировок, используйте для IsReaderLockHeld определения того, имеет ли текущий поток блокировку чтения.

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

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

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

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

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

AcquireWriterLock(TimeSpan)

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

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

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

Параметры

timeout
TimeSpan

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

Исключения

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

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

Комментарии

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

Поток, который уже имеет блокировку чтения, может получить блокировку записи одним из двух способов: путем выпуска блокировки чтения перед вызовом AcquireWriterLockили путем вызова UpgradeToWriterLock.

Предостережение

Если поток вызывается AcquireWriterLock , пока он по-прежнему имеет блокировку чтения, он блокируется на собственной блокировке чтения; если указано бесконечное время ожидания, поток будет взаимоблокировкой. Чтобы избежать таких взаимоблокировок, используйте для IsReaderLockHeld определения того, имеет ли текущий поток блокировку чтения.

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

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

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

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

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