沒有任何修改樹的任何東西都不是線程安全的。訣竅是在一個線程中填充SortedDictionary,然後將其視爲不可變,並讓多個線程從中讀取它們。 (你可以用一個SortedDictionary做到這一點,如前所述here。我提到這一點,因爲有可能是一個收集/詞典/地圖就在某個地方時,讀它是改變了,所以你應該總是檢查。)
如果你需要修改它,那麼它就會出現問題。你需要鎖定它來寫信給它,所有的讀者都需要尊重這個鎖,這意味着他們也需要鎖定它,這意味着讀者不能再同時閱讀它。 圍繞這個的最佳方式通常是創建一個全新的SortedDictionary,然後,一旦新的不可變,就將引用替換爲引用新引用。 (你需要一個不穩定的參考來做這件事。)讀者會毫無問題地乾淨地切換字典。直到最後的讀者完成閱讀併發布其參考,舊字典纔會消失。
(有n個閱讀器和1作家鎖,但要避免任何鎖定的。)
(並牢記參考字典可以突然改變,如果你列舉。使用一個局部變量,而不是引用(volatile)引用。)
Java有一個ConcurrentSkipListMap,它允許任意數量的同時讀寫操作,但我不認爲在.NET中有這樣的東西。如果有的話,它的讀取速度會比不可變的SortedDictionary慢。