使用ReaderWriterLock的真正缺点是什么?

我们有项目针对.NET 2.0 RTM(是的,它应该是.NET 2.0 RTM,我们有一些正统的客户端)。 而我只是想知道ReaderWriterLock的缺点是什么? 为什么每个人都说“不要使用它,尝试使用lock语句之类的东西”这么糟糕? 如果我们可以使用.NET 3.5,我肯定会使用ReaderWriterLockSlim ,但是对于ReaderWriterLock我对来自各地的所有这些警告感到有点害怕。 有人测量过表现还是其他什么? 如果存在一些性能问题,我们可以在哪些有效负载下遇到它们?

我们在ReaderWriterLock主要目的方面有一个经典的情况,即多次读取和很少写入。 使用lock语句会阻止所有读者。 也许对我们来说这不是一个可怕的问题,但如果我能使用ReaderWriterLock我会更满意。 IMO介绍几台显示器确实是一个非常糟糕的主意。

以下几篇文章可以为您提供您想要的想法。

ReaderWriterLockSlim与ReaderWriterLock的性能比较

Rico Mariani关于使用ReaderWriterLock部分这篇文章解释了使用ReaderWriterLock的一些成本和方案,同时检查了第1 部分和第2部分

Jeffrey Richter是ReaderWriterLock的替代品

如果你真的面对ReaderWriterLock的理想用例(即许多并发读取和少量写入),那么使用它!

如果你觉得它太慢,那就有其他选择。 Sanjeevakumar在他的回答中提供了一些链接。 我也会提供一个:
低锁技术的实际应用:实现Reader-Writer锁

我将在这里引用该链接中的内容:

  1. 使用我的第一篇文章中建议的读写器锁。 如果lock perf是个问题,请将此处的实现作为.NET System.ReaderWriterLock的“drop in”替换。 在Microsoft修复其库中的版本之前,请随意使用此实现。
  2. 旋锁是一种非常有价值的低锁技术。 这里使用了一个干净,简单但有效的读写器锁,在托管代码中有效地编写。 这个锁比我见过的大多数实现都要简单得多,但却能达到最佳状态。 这样做的原因是旋转锁的使用极大地简化了锁的设计和分析,而不会牺牲性能。 随意使用此处显示的Spin锁实现来制作其他高性能并发结构。
  3. 即使像Reader-Writer锁这样简单的东西也会对其行为产生微妙的影响(特别是当你考虑到性能问题时)。 保持简单真的在这里得到回报。