LockRecursionException

LockRecursionException

关于 ReaderWriterLockSlim :

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

我的观察结果:

  • 读者锁,然后读者锁 --> LockRecursionException
  • 读卡器锁,然后是可升级的读卡器锁 --> LockRecursionException
  • 读锁,然后写锁 --> LockRecursionException
  • 可升级读卡器锁,然后读卡器锁 --> 没有异常(exception)
  • 可升级读卡器锁,然后可升级读卡器锁 --> LockRecursionException
  • 可升级读锁,然后写锁 --> 没有异常(exception)
  • 写者锁,然后读者锁 --> LockRecursionException
  • 写入器锁,然后是可升级的读取器锁 --> LockRecursionException
  • 写锁,然后写锁 --> LockRecursionException

  • 这种行为是否正确?

    最佳答案

    From the docs :



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

    关于.net - ReaderWriterLockSlim : acquiring a read lock after an upgradeable lock doesn't throw LockRecursionException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14811313/

    10-11 02:00