因此,我的理解是,在ReaderWriterLock(或更具體地說ReaderWriterLockSlim)上,讀取和寫入都需要獲取互斥鎖才能獲取鎖定。我想優化鎖的讀取訪問權限,如果沒有寫入掛起,則不需要獲取鎖。 (而且我願意犧牲寫入的性能,爲讀取添加一些約束,使第一次讀取速度變慢,第二次讀取速度變快等等。如果有必要,只要絕大多數讀取速度儘可能快。 )優化的ReaderWriterLock讀取訪問
那麼,如何做到這一點,甚至更好,是否有框架或「標準」的實現可以指向我? (或者如果我誤解了它,它已經被支持了,太棒了!)
所以對於我的作品: 看來,如果有一個讀者/作者數量的計數器(由Interlocked.Increment保護) ,這足以讓讀者檢查作者數是否非零,然後才獲得鎖。 (如果獲得,則在鎖內增加)。
作家總是會增加,獲取鎖定,旋轉直到讀者數到0(願意假定讀者總是快速完成,或者甚至繞過讀者完全樂觀情景),最後遞減。 (當我們阻止時,也可以很好地拋出某種形式的優先級,或者因爲我只保護一個值,因此可能一次清除所有未決的讀寫器,但現在我會放棄這一點。)
所以..任何人看到任何相似或有建議?如果之後沒有任何東西出現,我會很樂意將最初的實現和更具體的討論結合起來。
謝謝格雷格,你說得對。我拉出反射器,並在獲取鎖之前使用Interlocked.CompareExchange進行檢查。乾杯! – Gene 2009-10-16 19:44:10