まず、新しいReaderWriterLockSlim
クラスを使用する必要があります。これは、古いクラスよりも効率的であり、潜在的なデッドロックの多くのケースも回避します。
第 2 に、ライターが書き込みを希望する時点で、既に読み取り (または書き込み) ロックを保持しているスレッドを待機する必要があることを回避することはできません。これは、リーダー/ライター ロックの要件の基本的な部分です。
第三に、書き込みロックを待機している場合、ライターはリーダーよりも優先されます。
のドキュメントからReaderWriterLockSlim.EnterWriteLock()
:
他のスレッドが読み取りモードでロックに入った場合、EnterWriteLock メソッドを呼び出すスレッドは、それらのスレッドが読み取りモードを終了するまでブロックされます。
書き込みモードに入るのを待っているスレッドがある場合、書き込みモードに入るのを待っているすべてのスレッドがタイムアウトするか、書き込みモードに入ってから終了するまで、読み取りモードまたはアップグレード可能モードに入ろうとする追加のスレッドがブロックされます。
この点で異なるようですReaderWriterLock
- これは修正されたものの 1 つに見えます。
これはあなたが得ることができる最高のものです。重要なことは、読者がロックを可能な限り短時間維持することです。
ReaderWriterLock
また、どちらもReaderWriterLockSlim
プロセス間ロックをサポートしていないことに注意してください。