2010-05-25 15 views
0

所以問題是什麼時候應該在訪問字典時使用EnterReadLock()和EnterWriteLock()?我應該如何使用ReaderWriterLockSlim和Dictionary <MyKeyClass,MyValueClass>?

  1. TryGetValue。我認爲這裏的ReadLock應該沒問題。
  2. 使用索引器更新字典例如_dic [現有密鑰] = 新值。我認爲這裏的ReadLock應該可以。
  3. 使用Indexer添加一個新項目例如_dic [newKey] = NewValue。我想我需要一個WriteLock在這裏。

在此先感謝!

回答

1

Anton已經提到過,您應該使用WriteLock來使用insers/updates/deletes並使用ReadLock進行讀取。

但是,您也可以考慮一個UpgradableReadLock。假設您檢查字典中的ContainsKey()或ContainsValue(),然後決定更新它。 UpgradableReadLock將允許您高效升級到WriteLock,而不會釋放ReadLock,然後重新獲取WriteLock。

0

雖然這不能直接回答您的問題,但請注意,明智地確定ReaderWriterLockSlim的解決方案實際上是否比正常的lock聲明更快(如果您還沒有這樣做的話)。新的ReaderWriterLockSlim仍然有很多開銷,並且在許多情況下(有很多讀取和較少的寫入)仍然比簡單的lock慢。除此之外,lock的設計比使用ReaderWriterLockSlim簡單得多。

相關問題