Performans sorunları nedeniyle, ReaderWriterLockSlim
ile ReaderWriterLock
değiştirdik. Bir RWL kullanıyorken doğru çalışan koddan kaynaklanan sıkıntıları yaşıyorum. Gördüğünüz gibiReaderWriterLockSLim ile sorun giderme ReaderWriterLockSLim - sorunları
(a yazma kilit edinme) bazen MethodA
(a kilit okumak edinir) başka bir yöntemi çağırır. İkinci yöntem de farklı yerlerden çağrılır, bu yüzden her zaman kilit çarpışma yoktur. Önceden, AcquiringRead kilidi bu soruna neden olmaz.
"IsRWheld kullanılıyorsa" dışında herhangi bir çözüm var mı?
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;
}
}