4

关于ReaderWriterLockSlim

随后在同一个线程中获取两个锁实际上应该抛出一个LockRecursionException(递归策略设置为NoRecursion)。

我的观察结果:

  • 读卡器,然后读卡器-->LockRecursionException
  • 读卡器,然后是可升级读卡器-->LockRecursionException
  • 锁,然后锁 -->LockRecursionException
  • 可升级读卡器锁,然后是读卡器锁 -->没有例外
  • 可升级读卡器锁,然后可升级读卡器锁 -->LockRecursionException
  • 可升级阅读器锁,然后是编写锁->没有例外
  • 锁,然后锁 -->LockRecursionException
  • writer lock,然后是可升级的 reader lock -->LockRecursionException
  • 锁,然后锁 -->LockRecursionException

这种行为正确吗?

4

1 回答 1

4

从文档

可升级模式的线程可以通过先调用EnterReadLock方法再调用ExitUpgradeableReadLock方法降级到读取模式。所有锁递归策略都允许这种降级模式,甚至NoRecursion.

我的理解是,对于写入情况,进入写入锁是从可升级模式转移到写入模式的正常方式,因此即使在以下政策下也必须得到支持NoRecursion(似乎对不可升级的可升级模式没什么意义锁 :)

于 2013-02-11T12:18:33.113 回答