次の方法で共有


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

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

適用対象