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

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

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

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

这是摘录:

如果已有线程处于可升级模式,有线程等待进入写入模式,或者如果写入模式中存在单个线程,则尝试进入可升级模式的线程会阻塞。

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

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

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

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

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

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

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