Tag: readerwriterlock

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

我们有项目针对.NET 2.0 RTM(是的,它应该是.NET 2.0 RTM,我们有一些正统的客户端)。 而我只是想知道ReaderWriterLock的缺点是什么? 为什么每个人都说“不要使用它,尝试使用lock语句之类的东西”这么糟糕? 如果我们可以使用.NET 3.5,我肯定会使用ReaderWriterLockSlim ,但是对于ReaderWriterLock我对来自各地的所有这些警告感到有点害怕。 有人测量过表现还是其他什么? 如果存在一些性能问题,我们可以在哪些有效负载下遇到它们? 我们在ReaderWriterLock主要目的方面有一个经典的情况,即多次读取和很少写入。 使用lock语句会阻止所有读者。 也许对我们来说这不是一个可怕的问题,但如果我能使用ReaderWriterLock我会更满意。 IMO介绍几台显示器确实是一个非常糟糕的主意。

您将如何简化输入和退出ReaderWriterLock?

这对我来说似乎很吵。 五行开销太多了。 m_Lock.EnterReadLock() Try Return m_List.Count Finally m_Lock.ExitReadLock() End Try 那你怎么这么简单呢?

ReaderWriterLockSlim与Monitor

我有一个IDictionary实现,它在内部保存另一个Dictionary并通过密钥的HashCode将这些插入分发到invidual子词典。 有16个子词典,4核机器上的冲突数量非常少。 对于并行插入,我使用ReaderWriterLockSlim锁定Add方法,仅锁定单个子字典: public void Add(TKey key, TValue value) { int poolIndex = GetPoolIndex(key); this.locks[poolIndex].EnterWriteLock(); try { this.pools[poolIndex].Add(key, value); } finally { this.locks[poolIndex].ExitWriteLock(); } } 当插入具有四个线程的项目时,我只有大约32%的CPU使用率和糟糕的性能。 所以我用Monitor替换了ReaderWriterLockSlim(即lock关键字)。 CPU使用率目前接近100%,性能提高了一倍多。 我的问题是:为什么CPU使用率会增加? 碰撞次数不应该改变。 是什么让ReaderWriterLock.EnterWriteLock等了这么多次?