12

我正在寻找一个可以从多个线程访问的只读字典。虽然 ConcurrentDictionary 公开了这些功能,但我不想有开销和奇怪的 API。

.Net 4.5 在提供这样一个类的同时,文档指出只有静态调用是安全的。

我想知道为什么?

4

1 回答 1

14

ReadOnlyDictionary只是任何其他字典的包装。因此,它仅与底层字典一样是线程安全的。

特别是,如果有一个线程在修改底层字典,而另一个线程从包装器中读取,则无法保证安全。

如果你想要一个ReadOnlyDictionary所有角度都有效地不可变的,你可以创建一个原始字典的克隆,ReadOnlyDictionary围绕它创建一个包装器,然后不要在任何地方保留对克隆的引用。进行读取操作,它应该是线程安全的。当然,如果键或值类型是可变的,则需要担心第二级“线程不安全”。

于 2012-12-03T13:25:58.097 回答