Debido a problemas de rendimiento, he reemplazado ReaderWriterLock
con ReaderWriterLockSlim
. Estoy experimentando problemas causados por un código que funcionaba correctamente cuando usaba un RWL.Reemplazar ReaderWriterLock con ReaderWriterLockSLim - problemas
Como se puede ver, a veces MethodA
(que adquiere una escritura bloqueo) llama a otro método (que adquiere una leer bloqueo). El segundo método también se llama desde diferentes lugares, por lo que no siempre hay una colisión de bloqueo. Anteriormente, el bloqueo AcquiringRead no causaba ese problema.
¿Hay alguna solución, excepto la colocación de "si IsRWheld"?
El problema es algo así:
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;
}
}