【发布时间】:2013-08-20 02:26:30
【问题描述】:
由于性能问题,我已将ReaderWriterLock 替换为ReaderWriterLockSlim。我遇到了问题,这是由使用 RWL 时运行正常的代码引起的。
如您所见,有时MethodA(获取write 锁)调用另一个方法(获取read 锁)。第二种方法也是从不同的地方调用的,所以并不总是有锁冲突。以前,AcquiringRead 锁不会导致该问题。
除了放置“if IsRWheld”之外,还有其他解决方案吗?
问题是这样的:
class Avacado
{
ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
void MethodA()
{
_lock.TryEnterWriteLock(-1);
LockedList.Add(someItem)
var result = MethodX();
_lock.ExitWriteLock();
}
object MethodX()
{
//if called from MethodA, it will throw an exception
_lock.TryEnterReadLock(-1);
//...some stuff with LockedList...
var result = LockList.Something();
_lock.ExitReadLock();
return result;
}
}
【问题讨论】:
标签: c# multithreading locking