3

そのため、複数のスレッド間で共有されるリソースに対して、非常に多くの読み取りがあり、たまにしか書き込みがないという状況があります。

ずいぶん前に私は について読み、多くの書き込みが切り札の読み取りに来てパフォーマンスを損なうという問題を軽減する試みReaderWriterLockについて読んだことがあります。ReaderWriterGateしかし、今になって気づいたReaderWriterLockSlim...

ドキュメントから、「アップグレード可能モード」のスレッドは一度に 1 つしか存在できないと思います。私が使用している唯一のアクセスがEnterUpgradeableReadLock()(私のシナリオに適している)である状況では、そのままにしておくことと大きな違いはありlock(){}ますか?

抜粋は次のとおりです。

アップグレード可能モードのスレッドが既に存在する場合、書き込みモードに入るのを待っているスレッドがある場合、または書き込みモードのスレッドが 1 つしかない場合、アップグレード可能モードに入ろうとするスレッドはブロックされます。

または、再帰ポリシーはこれに違いをもたらしますか?

4

2 に答える 2

4

同意した。すべてのスレッドがアップグレード可能な読み取りロックを取得する必要があり読み取りロックを解放して書き込みロックを取得する余裕がない場合、ReaderWriterLockSlim は単純な排他的ロックよりも改善されません。再帰はそれを変更しません。RWLS と、常に存在するデッドロックの危険を回避する必要があるため、単一のスレッドが書き込みを行うパターンが非常に有利です。

于 2010-04-30T17:17:37.690 に答える
0

私はあなたのすべての答えを持っているわけではありませんが、私はそれにショットを与えます:

c#のlockステートメントは、Monitor.EnterおよびMonitor.Exitを呼び出すためのシンタックスシュガーです。その結果、一度に1つのスレッドだけがロック内のコードにアクセスできます。

lock()
{
  //only one thread can access this code at a time
}

これに関する問題は、複数の読み取りは無害ですが、lock()はとにかくブロックすることです。ReaderWriterLockSlimは、複数の読み取り、1つの書き込みのみを許可します。これは効率を改善するための試みです。

再帰ポリシーは指定する必要があるものです。デフォルトではオフになっています。それ以上のことはよくわかりませんが、それが少し役立つことを願っています。

于 2010-04-30T16:01:39.077 に答える