由于性能问题,我已将 ReaderWriterLock
替换为 ReaderWriterLockSlim
。我遇到了问题,原因是代码在使用 RWL 时运行正常。
如您所见,有时 MethodA
(获取写锁)调用另一个方法(获取读锁)。第二种方法也是从不同的地方调用的,所以并不总是有锁冲突。以前, 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;
}
}
最佳答案
从MethodA调用MethodX会将其限定为递归使用锁。
请参阅MSDN page上有关ReaderWriterLockSlim的说明:
关于c# - 用 ReaderWriterLockSLim 替换 ReaderWriterLock - 麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1696096/