読み取り/書き込みロックReader-Writer Locks

ReaderWriterLockSlim クラスを使用すると、複数のスレッドが同時に 1 つのリソースを読み取ることができますが、リソースに書き込むためには、排他的なロックを待機する必要があります。The ReaderWriterLockSlim class enables multiple threads to read a resource concurrently, but requires a thread to wait for an exclusive lock in order to write to the resource.

アプリケーションで、ReaderWriterLockSlim を使用して、共有リソースにアクセスするスレッド間で協調的に同期させる場合があります。You might use a ReaderWriterLockSlim in your application to provide cooperative synchronization among threads that access a shared resource. ロックは ReaderWriterLockSlim 自体によって制御されます。Locks are taken on the ReaderWriterLockSlim itself.

他のスレッド同期機構と同様に、ReaderWriterLockSlim によって提供されるロックを回避するスレッドがないようにすることが必要です。As with any thread synchronization mechanism, you must ensure that no threads bypass the locking that is provided by ReaderWriterLockSlim. 1 つの方法として、共有リソースをカプセル化するクラスをデザインする方法があります。One way to ensure this is to design a class that encapsulates the shared resource. このクラスは、プライベートな共有リソースにアクセスするメンバーを提供します。このメンバーは、プライベートな ReaderWriterLockSlim を使用して同期を行います。This class would provide members that access the private shared resource and that use a private ReaderWriterLockSlim for synchronization. たとえば、ReaderWriterLockSlim クラスのコード例を参照してください。For an example, see the code example for the ReaderWriterLockSlim class. ReaderWriterLockSlim は効率的に動作するように設計されているので、個々のオブジェクトの同期に使用できます。ReaderWriterLockSlim is efficient enough to be used to synchronize individual objects.

読み取り操作と書き込み操作の時間を最小限にするように、アプリケーションの構造を設計してください。Structure your application to minimize the duration of read and write operations. 書き込みロックは排他的なので、書き込み操作の時間が長いと、その分、スループットが低下します。Long write operations affect throughput directly because the write lock is exclusive. 読み取り操作時間が長いと、ライターを待たせることになります。また、書き込みアクセスを待機しているスレッドが 1 つでもあると、読み取りアクセスを要求するスレッドもブロックされます。Long read operations block waiting writers, and if at least one thread is waiting for write access, threads that request read access will be blocked as well.

注意

.NET Framework.NET Framework には、ReaderWriterLockSlimReaderWriterLock という 2 つのリーダー/ライター ロックがあります。The .NET Framework.NET Framework has two reader-writer locks, ReaderWriterLockSlim and ReaderWriterLock. すべての新規開発で、ReaderWriterLockSlim を使用することをお勧めします。ReaderWriterLockSlim is recommended for all new development. ReaderWriterLockSlimReaderWriterLock と似ていますが、再帰の規則や、ロック状態のアップグレードおよびダウングレードの規則が簡素化されています。ReaderWriterLockSlim is similar to ReaderWriterLock, but it has simplified rules for recursion and for upgrading and downgrading lock state. ReaderWriterLockSlim は、デッドロックの可能性を大幅に回避します。ReaderWriterLockSlim avoids many cases of potential deadlock. さらに、ReaderWriterLockSlim のパフォーマンスは ReaderWriterLock と比較して格段に優れています。In addition, the performance of ReaderWriterLockSlim is significantly better than ReaderWriterLock.

参照See Also

ReaderWriterLockSlim
ReaderWriterLock
スレッド化Threading
スレッド処理オブジェクトと機能Threading Objects and Features