System.Threading.dll単一ライターと複数リーダーをサポートするロックを定義します。これは、同時に読み取りが行われ、複数のスレッドによって排他的に書き込まれます。クラスレベルで宣言されるので、すべてのスレッドから参照できます。使用することをお勧めします。似ていますが、再帰の規則や、ロック状態のアップグレードおよびダウングレードの規則が簡素化されています。デッドロックの可能性を大幅に回避します。比較して格段に優れています。リソースへのアクセスを同期するために使用されます。任意の時点で、複数のスレッドに対する同時読み取りアクセス、または1つのスレッドに対する書き込みアクセスが許可されます。Monitorなどの単純な1回限りのロックよりもスループットが向上します。ほとんどのアクセスが読み取りであり、書き込みは頻繁で短時間で行われるので、最適に機能します。複数のリーダーが1つのライターと交互に使用されるため、読み取りと書き込みのどちらも長期間ブロックされません。periods.注意リーダーロックまたはライターロックを長時間保持すると、他のスレッドが使用されなくなります。最適なパフォーマンスを得るには、書き込みの実行時間を最小限に抑えるようにアプリケーションを再構築することを検討してください。writes.スレッドは、リーダーロックまたはライターロックを保持できますが、両方を同時に保持することはできません。DowngradeFromWriterLockを使用できます。DowngradeFromWriterLock.再帰ロック要求は、ロックのロック数を増やします。lock.リーダーとライターは個別にキューに配置されます。スレッドがライターロックを解放すると、その時点でリーダーキューで待機しているすべてのスレッドにリーダーロックが付与されます。ライターロックが付与されます。リーダーのコレクションと1つのライターの間で代替ができます。writer.ライターキュー内のスレッドがアクティブなリーダーロックを解放するのを待機している間、新しいリーダーロックを要求しているスレッドがリーダーキューに蓄積されます。既存のリーダーロックの所有者との同時アクセスを共有できる場合でも、要求は許可されません。これは、リーダーによってブロックされないようにライターを保護するのに役立ちます。ロックを取得するほとんどのメソッドは、タイムアウト値を受け入れます。アプリケーションでデッドロックを回避するには、タイムアウトを使用します。あるスレッドが1つのリソースに対してライターロックを取得し、2番目のリソースにリーダーロックを要求する場合があります。その間に、別のスレッドが2番目のリソースのライターロックを取得し、最初にリーダーロックを要求する場合があります。タイムアウトが使用されていない限り、スレッドはデッドロック状態になります。ApplicationExceptionをスローすることによって、呼び出し元スレッドに制御を戻します。スレッドは、この例外をキャッチし、次に実行するアクションを決定することができます。next.タイムアウトはミリ秒単位で表されます。使用する場合、使用される値は、TimeSpanによって表される整数のミリ秒単位の合計数です。次の表に、有効なタイムアウト値をミリ秒単位で示します。スレッドは、時間の長さに関係なく、ロックが取得されるまで待機します。スレッドがロックの取得を待機していません。ロックをすぐに取得できない場合、メソッドはを返します。ミリ秒数単位の待機時間。除き、負のタイムアウト値は使用できません。以外の負の整数を指定した場合は、代わりにタイムアウト値0が使用されます。(つまり、ロックをすぐに取得できない場合、メソッドは待機せずに制御を戻します)。クラスの新しいインスタンスを初期化します。ロックを保持しているかどうかを示す値を取得します。ロックを保持しているかどうかを示す値を取得します。lock.WriterSeqNum現在のシーケンス番号を取得します。