我正在寻找一个可以从多个线程访问的只读字典。虽然 ConcurrentDictionary 公开了这些功能,但我不想有开销和奇怪的 API。
.Net 4.5 在提供这样一个类的同时,文档指出只有静态调用是安全的。
我想知道为什么?
我正在寻找一个可以从多个线程访问的只读字典。虽然 ConcurrentDictionary 公开了这些功能,但我不想有开销和奇怪的 API。
.Net 4.5 在提供这样一个类的同时,文档指出只有静态调用是安全的。
我想知道为什么?
ReadOnlyDictionary
只是任何其他字典的包装。因此,它仅与底层字典一样是线程安全的。
特别是,如果有一个线程在修改底层字典,而另一个线程从包装器中读取,则无法保证安全。
如果你想要一个ReadOnlyDictionary
从所有角度都有效地不可变的,你可以创建一个原始字典的克隆,ReadOnlyDictionary
围绕它创建一个包装器,然后不要在任何地方保留对克隆的引用。只进行读取操作,它应该是线程安全的。当然,如果键或值类型是可变的,则需要担心第二级“线程不安全”。