ReaderWriterLockSlim.EnterUpgradeableReadLock()与Monitor.Enter()基本相同吗?

时间:2010-04-30 14:50:04

标签: c# multithreading readerwriterlockslim

所以我的情况是,我可能有很多次读取,只偶尔写入多个线程之间共享的资源。

很久以前我读到了ReaderWriterLock,并且已经阅读了ReaderWriterGate,它试图缓解许多写入特朗普的写入并损害性能的问题。但是,现在我已经意识到ReaderWriterLockSlim ...

从文档中,我相信在任何时候都只能有一个“可升级模式”的线程。在我使用的唯一访问权限为EnterUpgradeableReadLock()(适合我的情况)的情况下,仅仅坚持使用lock(){}会有很大的不同吗?

以下是摘录:

  

尝试进入的线程   如果有可升级模式块   已经是可升级模式的线程,   如果有线程等待进入   写模式,或者如果有一个   线程处于写入模式。

或者,递归策略对此有何影响?

2 个答案:

答案 0 :(得分:4)

同意。如果所有线程需要获取可升级的读锁,则无法释放读锁并获取写锁,那么ReaderWriterLockSlim对简单的独占锁没有任何改进。递归不会改变这一点。 RWLS以及避免永远存在死锁危险的需要在很大程度上有利于单个线程执行写入的模式。

答案 1 :(得分:1)

我没有你所有的答案,但我会试一试:

c#中的lock语句是用于调用Monitor.Enter和Monitor.Exit的语法糖。结果是一次只有一个线程可以访问锁中的代码。

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

这个问题是多次读取是无害的,但无论如何都会阻塞lock()。 ReaderWriterLockSlim允许多次读取,只有一次写入。这是提高效率的尝试。

递归策略是您必须指定的 - 默认情况下它是关闭的。除此之外不要太了解,但希望有所帮助。