C#ReaderWriter锁定线程释放优先级

时间:2014-11-19 08:55:22

标签: .net multithreading .net-4.5 readerwriterlock

我最近遇到了多线程性能问题,并开始研究如何优化当前代码。

我的问题最合适的解决方案是使用读写器锁定,但杰弗里里希特的article让我对使用这种锁有一些疑问。我有更多的读者,然后作家,但作家的变化应该尽快应用。

此行为是否仍然保留在.net 4.5版本的readerwriter锁中?读者线程优先于写入程序线程?

1 个答案:

答案 0 :(得分:2)

首先,您应该使用新的ReaderWriterLockSlim类,它比旧的更有效,并且还避免了许多潜在的死锁情况。

其次,不可能避免编写者必须等待编写者想要写入时已经具有读(或写)锁的任何线程 - 这是读者需求的基本部分/作家锁。

第三,作者在等待写锁定时优先于读者。

来自ReaderWriterLockSlim.EnterWriteLock()的文档:

  

如果其他线程在读取模式下进入锁定状态,则调用EnterWriteLock方法的线程会阻塞,直到这些线程退出读取模式。

     

当有线程等待进入写入模式时,尝试进入读取模式或可升级模式块的其他线程,直到等待进入写入模式的所有线程都超时或进入写入模式然后退出

在这方面它似乎与ReaderWriterLock不同 - 这看起来像是已修复的事情之一。

这是你能得到的最好的。关键是读者可以在最短的时间内保持锁定。

另请注意,ReaderWriterLockReaderWriterLockSlim都不支持进程间锁定。