Из-за проблем с производительностью я заменил ReaderWriterLock
на ReaderWriterLockSlim
. Я испытываю проблемы, вызванные кодом, который правильно функционировал, когда он использовал RWL.Замена ReaderWriterLock на ReaderWriterLockSLim - проблемы
Как вы можете видеть, иногда 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;
}
}