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を呼び出すことによって、2 つの方法のいずれかでライター ロックを取得できます。

Caution

スレッドがリーダー ロックを持っている間に AcquireWriterLock を呼び出すと、それ自体のリーダー ロックでブロックされます。無限タイムアウトが指定されている場合、スレッドはデッドロックします。 このようなデッドロックを回避するには、 IsReaderLockHeld を使用して、現在のスレッドに既にリーダー ロックがあるかどうかを判断します。

AcquireWriterLock は、再帰的なライター ロック要求をサポートします。 つまり、スレッドは AcquireWriterLock を複数回呼び出すことができるため、毎回ロックカウントがインクリメントされます。 AcquireWriterLockを呼び出すたびに、ReleaseWriterLockを 1 回呼び出す必要があります。 または、 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を呼び出すことによって、2 つの方法のいずれかでライター ロックを取得できます。

Caution

スレッドがリーダー ロックを持っている間に AcquireWriterLock を呼び出すと、それ自体のリーダー ロックでブロックされます。無限タイムアウトが指定されている場合、スレッドはデッドロックします。 このようなデッドロックを回避するには、 IsReaderLockHeld を使用して、現在のスレッドに既にリーダー ロックがあるかどうかを判断します。

AcquireWriterLock は、再帰的なライター ロック要求をサポートします。 つまり、スレッドは AcquireWriterLock を複数回呼び出すことができるため、毎回ロックカウントがインクリメントされます。 AcquireWriterLockを呼び出すたびに、ReleaseWriterLockを 1 回呼び出す必要があります。 または、 ReleaseLock を呼び出して、ロック数を直ちにゼロに減らすことができます。

再帰ロック要求は、要求スレッドをライター キューに配置せずに、常に直ちに許可されます。

有効なタイムアウト値については、 ReaderWriterLockを参照してください。

こちらもご覧ください

適用対象