我知道ReadOnlyDictionary
是"线程安全";当从多个线程访问时,只要集合不变
但是,如果集合没有更改(从未添加/删除任何键(,并且值本身是线程安全的,也就是说,引用不会更改,但值的内部数据可能会更改(Value
对象本身是线程保护的(例如
ReadOnlyDictionary<Key, ThreadSafe Value> dictionary = new...
dictionary[key].inc()
其中inc()
是ThreadSafeValue
的线程安全方法。
由于集合本身没有改变,引用也没有改变,我认为这是可以的,但由于ReadOnlyDictionary没有公开Add/Remove/Update,而且它不是线程安全的,我想知道我的假设是否正确
您的问题似乎源于对什么是";值";在字典的上下文中。
从字典的角度来看,假设ThreadSafeValue
是引用类型,那么该值就是对对象的引用。如果你从不修改字典,那么引用本身就永远不会改变。换句话说,键和值都不会改变。
如果ThreadSafeValue
本身是线程安全的,那么整个用例看起来是安全的。