Aufgrund von Leistungsproblemen habe ich ReaderWriterLock
durch ReaderWriterLockSlim
ersetzt. Ich habe Probleme, die durch einen Code verursacht wurden, der bei Verwendung einer RWL korrekt funktioniert hat.Ersetzen von ReaderWriterLock mit ReaderWriterLockSLim - Probleme
Wie Sie sehen können, manchmal MethodA
(die eine Schreib Sperre erwirbt) ruft eine andere Methode (die eine lesen Sperre erwirbt). Die zweite Methode wird auch von verschiedenen Orten aufgerufen, so dass es nicht immer zu einer Blockierung kommt. Zuvor verursachte AcquiringRead Sperre dieses Problem nicht.
Gibt es eine Lösung, außer "if IsRWheld" zu platzieren?
Das Problem ist so etwas wie die:
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;
}
}