由於性能問題,我用ReaderWriterLockSlim
替換ReaderWriterLock
。我遇到了麻煩,這是由使用RWL時正確運行的代碼引起的。用ReaderWriterLockSLim替換ReaderWriterLock - 問題
正如你所看到的,有時MethodA
(其中取得寫鎖)調用另一個方法(它取得讀鎖)。第二種方法也是從不同的地方調用的,所以並不總是存在鎖相碰撞。以前,AcquiringRead鎖不會導致該問題。
是否有任何解決方案,除了放置「如果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;
}
}