ReaderWriterLockSlim.TryEnterWriteLock メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オプションのタイムアウトを使用して、書き込みモードでロックを開始しようとします。
オーバーロード
| 名前 | 説明 |
|---|---|
| TryEnterWriteLock(Int32) |
オプションのタイムアウトを使用して、書き込みモードでロックを開始しようとします。 |
| TryEnterWriteLock(TimeSpan) |
オプションのタイムアウトを使用して、書き込みモードでロックを開始しようとします。 |
TryEnterWriteLock(Int32)
オプションのタイムアウトを使用して、書き込みモードでロックを開始しようとします。
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock(int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
パラメーター
返品
true 呼び出し元のスレッドが書き込みモードに入った場合は false。
例外
RecursionPolicy プロパティがNoRecursionされ、現在のスレッドが既にロックに入っています。
-または-
現在のスレッドは最初に読み取りモードでロックに入ったため、書き込みモードに入ろうとするとデッドロックが発生する可能性があります。
-または-
再帰数がカウンターの容量を超えます。 この制限は非常に大きいため、アプリケーションで発生することはありません。
millisecondsTimeoutの値は負の値ですが、Infinite (-1) と等しくありません。これは、許容される唯一の負の値です。
ReaderWriterLockSlim オブジェクトが破棄されました。
例
次の例は、 TryEnterWriteLock メソッドを使用して、タイムアウト状態で書き込みモードでロックに入る方法を示しています。この例に示すメソッドは、同期されたキャッシュに新しいキーと値のペアを追加します。 スレッドがロックに入る前に指定したタイムアウト間隔が経過すると、メソッドは falseを返します。 このメソッドは、キーと値のペアが追加された場合に true を返します。
キーが既にキャッシュ内にある場合、内部 Dictionary<TKey,TValue> によってスローされた例外は、メソッドを終了できます。
finally ブロックは、ExitWriteLock メソッドを実行するために使用され、呼び出し元がロックを終了することを確認します。
このコードは、 ReaderWriterLockSlim クラスに提供されるより大きな例の一部です。
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public bool AddWithTimeout(int key, string value, int timeout)
{
if (cacheLock.TryEnterWriteLock(timeout))
{
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
return true;
}
else
{
return false;
}
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
ByVal timeout As Integer) As Boolean
If cacheLock.TryEnterWriteLock(timeout) Then
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
Return True
Else
Return False
End If
End Function
注釈
millisecondsTimeoutが 0 (ゼロ) の場合、このメソッドはロック状態を確認し、目的の状態が使用できない場合は直ちにfalseを返します。
他のスレッドが読み取りモードでロックに入った場合、 TryEnterWriteLock メソッドを呼び出すスレッドは、それらのスレッドが読み取りモードを終了するまで、またはタイムアウト間隔が経過するまでブロックします。 スレッドが書き込みモードに入るのを待機している間にブロックされますが、書き込みモードに入るのを待機しているすべてのスレッドがタイムアウトになるか、書き込みモードに入ってから終了するまで、読み取りモードまたはアップグレード可能モードに入ろうとする追加のスレッドがブロックされます。
Note
ロックで再帰が許可されている場合、書き込みモードでロックに入ったスレッドは、他のスレッドが書き込みモードに入るのを待機している場合でも、再帰的に書き込みモードに入ることができます。
適用対象
TryEnterWriteLock(TimeSpan)
オプションのタイムアウトを使用して、書き込みモードでロックを開始しようとします。
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock(TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
パラメーター
- timeout
- TimeSpan
待機する間隔、または無期限に待機する -1 ミリ秒。
返品
true 呼び出し元のスレッドが書き込みモードに入った場合は false。
例外
RecursionPolicy プロパティがNoRecursionされ、現在のスレッドが既にロックに入っています。
-または-
現在のスレッドは最初に読み取りモードでロックに入ったため、書き込みモードに入ろうとするとデッドロックが発生する可能性があります。
-または-
再帰数がカウンターの容量を超えます。 この制限は非常に大きいため、アプリケーションで発生することはありません。
ReaderWriterLockSlim オブジェクトが破棄されました。
注釈
timeoutが 0 (ゼロ) の場合、このメソッドはロック状態を確認し、目的の状態が使用できない場合は直ちにfalseを返します。
他のスレッドが読み取りモードでロックに入った場合、 TryEnterWriteLock メソッドを呼び出すスレッドは、それらのスレッドが読み取りモードを終了するまで、またはタイムアウト間隔が経過するまでブロックします。 スレッドが書き込みモードに入るのを待機している間にブロックされますが、書き込みモードに入るのを待機しているすべてのスレッドがタイムアウトになるか、書き込みモードに入ってから終了するまで、読み取りモードまたはアップグレード可能モードに入ろうとする追加のスレッドがブロックされます。
Note
ロックで再帰が許可されている場合、書き込みモードでロックに入ったスレッドは、他のスレッドが書き込みモードに入るのを待機している場合でも、再帰的に書き込みモードに入ることができます。