我们有针对.NET 2.0 RTM的项目(是的,它应该是.NET 2.0 RTM,我们有一些正统的客户端)。而我只是想知道ReaderWriterLock的缺点是什么?为什么每个人都说“不要使用它,尝试使用其他类似lock
语句”这么糟糕?如果我们可以使用.NET 3.5,我肯定会使用ReaderWriterLockSlim,但是ReaderWriterLock
我对所有来自各地的警告都有点可怕。有人测量过表现还是其他什么?如果存在一些性能问题,我们可以在哪些有效负载下遇到它们?
我们有ReaderWriterLock
主要目的的经典情况,即多次读取和很少写入。使用lock
语句会阻止所有读者。也许对我们来说这不是一个可怕的问题,但如果我可以使用ReaderWriterLock
我会更满意。 IMO介绍几台显示器确实是一个非常糟糕的主意。
答案 0 :(得分:7)
以下几篇文章可以为您提供您想要的想法。
Performance Comparison of ReaderWriterLockSlim with ReaderWriterLock
Rico Mariani on Using ReaderWriterLock part这篇文章解释了使用ReaderWriterLock的一些成本和方案,同时检查了part 1和part 2
答案 1 :(得分:1)
如果你真的面对ReaderWriterLock的理想用例(即许多并发读取和少量写入),那么使用它!
如果你觉得它太慢,那就有其他选择。 Sanjeevakumar在他的回答中提供了一些链接。我也会提供一个:
Low-Lock Techniques in action: Implementing a Reader-Writer lock
我将在这里引用该链接中的内容:
- 使用我的第一篇文章中建议的读写器锁。如果lock perf是一个问题,请将此处的实现作为.NET System.ReaderWriterLock的“drop in”替换。在Microsoft修复其库中的版本之前,请随意使用此实现。
- 旋锁是一种非常有价值的低锁技术。这里使用了一个干净,简单但有效的读写器锁,可以在托管代码中完美地编写。这个锁比我见过的大多数实现都要简单得多,但是最优化。这样做的原因是旋转锁的使用极大地简化了锁的设计和分析,而不会牺牲性能。随意使用此处显示的Spin lock实现来制作其他高性能并发结构。
- 即使像Reader-Writer锁这样简单的东西也会对其行为产生微妙的影响(特别是当你考虑到性能问题时)。保持简单真的在这里得到回报。
醇>