読み取り/書き込みロック

ReaderWriterLockSlim クラスを使用すると、複数のスレッドが同時に 1 つのリソースを読み出すことができまが、リソースに書き込むためには、排他的なロックを待機する必要があります。

アプリケーションでは、ReaderWriterLockSlim を使用して、リソースを共有しているスレッドの協調的な同期をとることができます。 ロックは ReaderWriterLockSlim 自体によって制御されます。

他のスレッド同期機構と同様に、ReaderWriterLockSlim によって提供されるロックを回避するスレッドがないようにすることが必要です。 1 つの方法として、共有リソースをカプセル化するクラスをデザインする方法があります。 このクラスは、プライベートな共有リソースにアクセスするメンバーを提供します。このメンバーは、プライベートな ReaderWriterLockSlim を使用して同期を行います。 たとえば、ReaderWriterLockSlim クラスのコード例を参照してください。 ReaderWriterLockSlim は効率的に動作するようにデザインされているので、個々のオブジェクトの同期に使用できます。

読み取り操作と書き込み操作の時間を最小限にするように、アプリケーションの構造をデザインしてください。 書き込みロックは排他的なので、書き込み操作の時間が長いと、その分、スループットが低下します。 読み取り操作時間が長いと、書き込みスレッドを待たせることになります。また、書き込みアクセスのために待機しているスレッドが 1 つでもあると、読み取りアクセスを要求するスレッドもブロックされます。

メモメモ

.NET Framework には、ReaderWriterLockSlimReaderWriterLock という 2 つのリーダー/ライター ロックがあります。すべての新規開発で、ReaderWriterLockSlim を使用することをお勧めします。ReaderWriterLockSlimReaderWriterLock と似ていますが、再帰の規則や、ロック状態のアップグレードおよびダウングレードの規則が簡素化されています。ReaderWriterLockSlim は、デッドロックの可能性を大幅に回避します。さらに、ReaderWriterLockSlim のパフォーマンスは ReaderWriterLock と比較して格段に優れています。

参照

参照

ReaderWriterLockSlim

ReaderWriterLock

その他の技術情報

マネージ スレッド処理

スレッド処理オブジェクトと機能