ReaderWriterLockSlim.EnterWriteLock メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
書き込みモードでロックに入ることを試みます。
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
ロックで再帰が許可されている場合、書き込みモードでロックに入ったスレッドは、他のスレッドが書き込みモードに入るのを待機している場合でも、書き込みモードに再帰的に入ることができます。
適用対象
.NET