4

についてReaderWriterLockSlim

その後、同じスレッド内で2つのロックを取得すると、実際にはがスローLockRecursionExceptionされます(再帰ポリシーはに設定されていNoRecursionます)。

私の観察結果:

  • リーダーロック、次にリーダーロック->LockRecursionException
  • リーダーロック、次にアップグレード可能なリーダーロック->LockRecursionException
  • リーダーロック、次にライターロック->LockRecursionException
  • アップグレード可能なリーダーロック、次にリーダーロック->例外なし
  • アップグレード可能なリーダーロック、次にアップグレード可能なリーダーロック->LockRecursionException
  • アップグレード可能なリーダーロック、次にライターロック->例外なし
  • ライターロック、次にリーダーロック->LockRecursionException
  • ライターロック、次にアップグレード可能なリーダーロック->LockRecursionException
  • ライターロック、次にライターロック->LockRecursionException

この動作は正しいですか?

4

1 に答える 1

4

ドキュメントから

EnterReadLockアップグレード可能モードのスレッドは、最初にメソッドを呼び出してからメソッドを呼び出すことにより、読み取りモードにダウングレードできますExitUpgradeableReadLock。このダウングレードパターンは、すべてのロック再帰ポリシーで許可されますNoRecursion

私の理解では、書き込みの状況では、書き込みロックを入力することは、とにかくアップグレード可能から書き込みモードに移行する通常の方法であるため、NoRecursion(アップグレード不可能なアップグレード可能にはほとんど意味がないようです)のポリシーの下でもサポートする必要がありますロック :)

于 2013-02-11T12:18:33.113 に答える