C# ReaderWriterLockSlim.EnterUpgradeableReadLock()与Monitor.Enter()基本相同吗?
因此,在这种情况下,我可能会有很多很多次读取,而只是偶尔写入多个线程之间共享的资源 很久以前,我读过关于ReaderWriterLock的文章,也读过关于哪些试图缓解问题的文章,其中许多文章都是特朗普写的,会影响性能。然而,现在我意识到 从文档中,我相信在任何时候只有一个线程处于“可升级模式”。在我使用的唯一访问权限是(适合我的场景)的情况下,只使用C# ReaderWriterLockSlim.EnterUpgradeableReadLock()与Monitor.Enter()基本相同吗?,c#,multithreading,readerwriterlockslim,C#,Multithreading,Readerwriterlockslim,因此,在这种情况下,我可能会有很多很多次读取,而只是偶尔写入多个线程之间共享的资源 很久以前,我读过关于ReaderWriterLock的文章,也读过关于哪些试图缓解问题的文章,其中许多文章都是特朗普写的,会影响性能。然而,现在我意识到 从文档中,我相信在任何时候只有一个线程处于“可升级模式”。在我使用的唯一访问权限是(适合我的场景)的情况下,只使用lock(){},有什么区别吗 以下是摘录: 试图进入的线程 可升级模式块(如果有) 已经有一个线程处于可升级模式, 如果有线程等待进入 写入模式,
lock(){}
,有什么区别吗
以下是摘录:
试图进入的线程
可升级模式块(如果有)
已经有一个线程处于可升级模式,
如果有线程等待进入
写入模式,或者如果有一个
线程处于写模式
或者,递归策略对此有什么影响吗?我没有你所有的答案,但我会试一试: c#中的lock语句是调用Monitor.Enter和Monitor.Exit的语法糖。其效果是一次只能有一个线程访问锁中的代码
lock()
{
//only one thread can access this code at a time
}
问题是多次读取是无害的,但是lock()还是会阻塞。ReaderWriterLockSlim允许多次读取,仅允许一次写入。这是提高效率的一种尝试
递归策略是您必须指定的—默认情况下它是关闭的。除此之外我不知道太多,但希望这能有所帮助。同意。如果您的所有线程都需要获取可升级的读锁,并且您无法释放读锁和获取写锁,那么ReaderWriterLockSlim与简单的独占锁相比并没有任何改进。递归不会改变这一点。RWL和避免死锁危险的需要非常倾向于一种由单个线程进行写入的模式。也检查这个答案。当我读到这篇文章时,我发现它很有用: