0

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

最适合我的问题的解决方案是使用读写锁,但是 Jeffrey Richter 的这篇文章让我对使用这种锁产生了一些疑问。我的读者比作者多得多,但是应该尽快应用作者的更改。

这种行为是否仍然存在于 .net 4.5 版本的读写器锁中?我的意思是读线程优先于写线程?

4

1 回答 1

2

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

其次,不可能避免写者在写者想要写的时候不得不等待任何已经拥有读(或写)锁的线程——这是读/写锁要求的基本部分。

第三,写者在等待写锁时确实优先于读者。

从文档中ReaderWriterLockSlim.EnterWriteLock()

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

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

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

这是你能得到的最好的。关键是让读者在尽可能短的时间内保持他们的锁。

另请注意,既不ReaderWriterLock也不ReaderWriterLockSlim支持进程间锁。

于 2014-11-19T09:08:56.390 回答