只有值在变化时可以使用 ReadOnlyDictionary 吗?

Can ReadOnlyDictionary be used when only the values are changing?

我知道 ReadOnlyDictionary 从多线程访问时是“线程安全的”,只要集合不变即可。
但是如果集合没有改变(没有键永远 added/removed)并且值本身是线程安全的,这意味着引用不会改变,但值的内部数据可能(Value对象本身是线程安全的) 例如

ReadOnlyDictionary<Key, ThreadSafe Value> dictionary = new...  
dictionary[key].inc()

其中inc()ThreadSafeValue的线程安全方法。

由于集合本身没有改变,引用也没有改变,我认为这没问题,但由于 ReadOnlyDictionary 不公开 Add/Remove/Update 并且它不是线程安全的,我想知道如果我的假设是正确的

您的问题似乎源于对字典上下文中“值”的含义的混淆。

从字典的角度来看,假设ThreadSafeValue是一个引用类型,那么这个值就是对对象的引用。如果你从不修改字典,那么引用本身就永远不会改变。换句话说,键和值都没有改变。

如果 ThreadSafeValue 本身是线程安全的,那么整个用例就显得安全。

是的,你的假设是正确的。由于存储在字典中的值是自主线程安全的,并且字典本身实际上是不可变的,因此整个数据结构是线程安全的。