Rau*_*otz 5 c# multithreading locking readerwriterlock
我有一个IDictionary<TKey,TValue>内部持有另一个的实现,Dictionary<TKey, TValue>并通过密钥的HashCode将插入分发到invidual子字典.有16个子词典,4核机器上的冲突数量相当低.
对于并行插入,我使用a锁定Add-method ReaderWriterLockSlim,仅锁定单个子字典:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
插入四个线程的项目时,我只有大约32%的CPU使用率和糟糕的性能.所以我用Monitor(即lock关键字)替换了ReaderWriterLockSlim .CPU使用率现在接近100%,性能提高了一倍多.
我的问题是:为什么CPU使用率会增加?碰撞次数不应该改变.是什么让ReaderWriterLock.EnterWriteLock等了这么多次?
小智 13
对于只写加载,Monitor比ReaderWriterLockSlim便宜,但是,如果你模拟read + write load,其中read远大于write,那么ReaderWriterLockSlim应该执行Monitor.
| 归档时间: |
|
| 查看次数: |
6317 次 |
| 最近记录: |