En raison de problèmes de performances, j'ai remplacé ReaderWriterLock
par ReaderWriterLockSlim
. Je rencontre des problèmes, causés par du code qui fonctionnait correctement quand il utilisait un RWL.Remplacement de ReaderWriterLock avec ReaderWriterLockSLim - Problèmes
Comme vous pouvez le voir, parfois MethodA
(qui acquiert une écriture verrouillage) appelle une autre méthode (qui un verrou lecture). La deuxième méthode est également appelée à partir de différents endroits, donc il n'y a pas toujours de collision de verrouillage. Auparavant, le verrouillage AcquiringRead ne provoque pas ce problème.
Existe-t-il une solution autre que de placer "si IsRWheld"?
Le problème est quelque chose comme ça:
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;
}
}