我正在尋找從多個線程訪問的只讀字典。雖然ConcurrentDictionary公開了這樣的功能,但我不想擁有開銷和奇怪的API。爲什麼ReadOnlyDictionary不是線程安全的?
.net 4.5雖然提供了這樣一個類,文檔指出只有靜態調用是安全的。
我想知道爲什麼?
我正在尋找從多個線程訪問的只讀字典。雖然ConcurrentDictionary公開了這樣的功能,但我不想擁有開銷和奇怪的API。爲什麼ReadOnlyDictionary不是線程安全的?
.net 4.5雖然提供了這樣一個類,文檔指出只有靜態調用是安全的。
我想知道爲什麼?
ReadOnlyDictionary
只是其他任何字典的包裝。因此,它只是與底層字典一樣是線程安全的。
特別是,如果在另一個線程從包裝器讀取時有線程修改底層字典,則不能保證安全。
如果你想有一個ReadOnlyDictionary
這是從所有角度有效一成不變的,你可以創建原始字典的克隆,創建一個圍繞一個ReadOnlyDictionary
包裝,再不能保持到克隆的引用的任何地方。只有只有讀操作正在進行,它應該是線程安全的。當然,如果關鍵字或值類型是可變的,那麼會引發第二種程度的「線程不安全」擔心。從微軟的文檔
複製: 線程安全 ConcurrentDictionary所有的公共和保護成員中是線程安全的,並且可以從多個線程同時使用。 –
@KenCheung:目前尚不清楚爲什麼你的評論是相關的。這個問題表明OP已經知道'ConcurrentDictionary <,>',但詢問'ReadOnlyDictionary <,>'的安全性。 –