次の方法で共有


ReaderWriterLock.AcquireWriterLock メソッド (TimeSpan)

タイムアウトに TimeSpan 値を使用して、ライタ ロックを取得します。

Overloads Public Sub AcquireWriterLock( _
   ByVal timeout As TimeSpan _)
[C#]
public void AcquireWriterLock(TimeSpantimeout);
[C++]
public: void AcquireWriterLock(TimeSpantimeout);
[JScript]
public function AcquireWriterLock(
   timeout : TimeSpan);

パラメータ

  • timeout
    タイムアウト時間を指定する TimeSpan

例外

例外の種類 条件
ApplicationException timeout は、ロック要求が許可される前に期限が切れます。
ArgumentOutOfRangeException timeout は、-1 ミリ秒以外の負の値を指定します。

解説

別のスレッドがリーダー ロックまたはライタ ロックを保持している場合、このメソッドはブロックします。ライタ ロックと複数の同時リーダー ロックが交互に処理される方法の詳細については、 ReaderWriterLock クラスのトピックを参照してください。

既にリーダー ロックを保持しているスレッドがライタ ロックを取得するには、リーダー ロックを解放してから AcquireWriterLock を呼び出す方法と、 UpgradeToWriterLock を呼び出す方法があります。

注意   既にリーダー ロックを保持しているスレッドが AcquireWriterLock を呼び出した場合、既に保持しているリーダー ロックによってスレッドはブロックされます。タイムアウト値が無制限に設定されている場合、スレッドはデッドロック状態になります。このようなデッドロックを避けるには、 IsReaderLockHeld を使用して、現在のスレッドが既にリーダー ロックを保持していないかどうかを確認します。

AcquireWriterLock は、再帰的なライタ ロック要求をサポートします。つまり、1 つのスレッドは AcquireWriterLock を複数回呼び出すことができます。ロック カウントは呼び出しのたびにインクリメントされます。 ReleaseWriterLock は、 AcquireWriterLock を呼び出した回数だけ呼び出す必要があります。代わりに、 ReleaseLock を呼び出すことによって、ロック カウントをすぐに 0 に設定することもできます。

再帰的なロック要求は必ずすぐに許可されます。このとき、スレッドがライタ キューに置かれることはありません。

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

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

ReaderWriterLock クラス | ReaderWriterLock メンバ | System.Threading 名前空間 | ReaderWriterLock.AcquireWriterLock オーバーロードの一覧 | スレッド処理 | ReaderWriterLock