ReaderWriterLock.AcquireWriterLock メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ライター ロックを取得します。
オーバーロード
| 名前 | 説明 |
|---|---|
| AcquireWriterLock(Int32) |
タイムアウトの Int32 値を使用して、ライター ロックを取得します。 |
| AcquireWriterLock(TimeSpan) |
タイムアウトの TimeSpan 値を使用して、ライター ロックを取得します。 |
AcquireWriterLock(Int32)
タイムアウトの 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)
タイムアウトの 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を参照してください。