2009-11-08 28 views
7

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; 
    } 
} 

cevap

8

Yöntemia gelen MethodX çağrı kilit özyinelemeli kullanımı olarak nitelendirir:

Sorun bunun gibi bir şeydir. Varsayılan olarak

, ReaderWriterLockSlim yeni örneklerini LockRecursionPolicy.NoRecursion bayrağı ile oluşturulur ve özyinelemeye izin vermez:
ReaderWriterLockSlim için MSDN page üzerine açıklamalar Bkz. özyineleme gereksiz komplikasyonlar tanıtır ve çözümsüzlüklerle daha yatkın kodunuzu yapar, çünkü bu varsayılan politikası, tüm yeni gelişme için tavsiye edilir. Monitör veya ReaderWriterLock kullanmak mevcut projelerden göçü basitleştirmek için, Özyinelemeyi izin ReaderWriterLockSlim örneklerini oluşturmak için LockRecursionPolicy.SupportsRecursion bayrağını kullanabilirsiniz.

4

ReaderWriterLockSlim tarafından ReaderWriterLock değiştirirken dikkate alınması gereken bir diğer nokta, ikincisi uygular IDisposable olduğunu.

Bu, değiştirme kompleksini oluşturabilir - ReaderWriterLockSlim ürününe sahip olan tüm ürünler de IDisposable olmalıdır.

İlgili konular