ReaderWriterLockSlim.EnterWriteLock メソッド

定義

書き込みモードでロックの開始を試みます。

public:
 void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()

例外

RecursionPolicy プロパティがNoRecursionされ、現在のスレッドが既に任意のモードでロックに入っています。

-または-

現在のスレッドは読み取りモードに入り、まだ書き込みロックを所有していないため、書き込みモードでロックを開始しようとするとデッドロックが発生する可能性があります。

-または-

再帰数がカウンターの容量を超えます。 この制限は非常に大きいため、アプリケーションで発生することはありません。

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

次の例は、 EnterWriteLock メソッドを使用して書き込みモードでロックを開始する方法を示しています。 この例に示すメソッドは、同期されたキャッシュに新しいキーと値のペアを追加します。 キーが既にキャッシュ内にある場合、内部 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 void Add(int key, string value)
{
    cacheLock.EnterWriteLock();
    try
    {
        innerCache.Add(key, value);
    }
    finally
    {
        cacheLock.ExitWriteLock();
    }
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
    cacheLock.EnterWriteLock()
    Try
        innerCache.Add(key, value)
    Finally
        cacheLock.ExitWriteLock()
    End Try
End Sub

注釈

このメソッドは、呼び出し元のスレッドがロックに入るまでブロックするため、戻らない可能性があります。 TryEnterWriteLock メソッドを使用して、指定した間隔でブロックし、呼び出し元のスレッドがその期間中に書き込みモードに入っていない場合に戻ります。

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

Note

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

適用対象