次の方法で共有


ReaderWriterLockSlim.TryEnterWriteLock メソッド

定義

オプションのタイムアウトを指定して、書き込みモードでロックに入ることを試みます。

オーバーロード

TryEnterWriteLock(Int32)

オプションのタイムアウトを指定して、書き込みモードでロックに入ることを試みます。

TryEnterWriteLock(TimeSpan)

オプションのタイムアウトを指定して、書き込みモードでロックに入ることを試みます。

TryEnterWriteLock(Int32)

ソース:
ReaderWriterLockSlim.cs
ソース:
ReaderWriterLockSlim.cs
ソース:
ReaderWriterLockSlim.cs

オプションのタイムアウトを指定して、書き込みモードでロックに入ることを試みます。

public:
 bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean

パラメーター

millisecondsTimeout
Int32

待機するミリ秒数。無制限に待機する場合は Infinite (-1)。

戻り値

呼び出し元のスレッドが書き込みモードに入った場合は 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

注釈

が 0 (ゼロ) の場合 millisecondsTimeout 、このメソッドはロック状態を確認し、目的の状態が使用できない場合は直ちにを返 false します。

他のスレッドが読み取りモードでロックに入った場合、メソッドを呼び出す TryEnterWriteLock スレッドは、それらのスレッドが読み取りモードを終了するか、タイムアウト間隔が経過するまでブロックします。 スレッドが書き込みモードに入るのを待っている間はブロックされますが、書き込みモードに入るのを待機しているすべてのスレッドがタイムアウトするか、書き込みモードに入ってから終了するまで、読み取りモードまたはアップグレード可能モードに入ろうとする追加のスレッドがブロックされます。

Note

ロックで再帰が許可されている場合、書き込みモードでロックに入ったスレッドは、他のスレッドが書き込みモードに入るのを待機している場合でも、書き込みモードに再帰的に入ることができます。

適用対象

TryEnterWriteLock(TimeSpan)

ソース:
ReaderWriterLockSlim.cs
ソース:
ReaderWriterLockSlim.cs
ソース:
ReaderWriterLockSlim.cs

オプションのタイムアウトを指定して、書き込みモードでロックに入ることを試みます。

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 で、現在のスレッドは既にロックに入っています。

- または -

現在のスレッドは最初に読み取りモードでロックに入ったため、書き込みモードに入ろうとするとデッドロックの可能性が生じます。

- または -

再帰の回数は、カウンターの容量を超える可能性があります。 この容量は非常に大きいので、アプリケーションでこの状況が発生することは通常はありません。

timeout の値が負ですが、指定できる唯一の負の値である -1 ミリ秒と等しくありません。

- または -

timeout 値が Int32.MaxValue ミリ秒を超えています。

ReaderWriterLockSlim オブジェクトは破棄されました。

注釈

が 0 (ゼロ) の場合 timeout 、このメソッドはロック状態を確認し、目的の状態が使用できない場合は直ちにを返 false します。

他のスレッドが読み取りモードでロックに入った場合、メソッドを呼び出す TryEnterWriteLock スレッドは、それらのスレッドが読み取りモードを終了するか、タイムアウト間隔が経過するまでブロックします。 スレッドが書き込みモードに入るのを待っている間はブロックされますが、書き込みモードに入るのを待機しているすべてのスレッドがタイムアウトするか、書き込みモードに入ってから終了するまで、読み取りモードまたはアップグレード可能モードに入ろうとする追加のスレッドがブロックされます。

Note

ロックで再帰が許可されている場合、書き込みモードでロックに入ったスレッドは、他のスレッドが書き込みモードに入るのを待機している場合でも、書き込みモードに再帰的に入ることができます。

適用対象