【发布时间】:2022-01-21 05:40:42
【问题描述】:
我知道ReadOnlyDictionary 在从多个线程访问时是“线程安全的”,只要集合没有改变。
但是如果集合没有改变(没有添加/删除键)并且值本身是线程安全的,这意味着引用不会改变,但值的内部数据可能(Value 对象本身是线程安全的)
例如
ReadOnlyDictionary<Key, ThreadSafe Value> dictionary = new...
dictionary[key].inc()
其中inc() 是ThreadSafeValue 的线程安全方法。
由于集合本身没有改变,引用也没有改变,我认为这没问题,但由于 ReadOnlyDictionary 不公开 Add/Remove/Update 并且它不是线程安全的,我想知道我的假设是正确的
【问题讨论】:
-
ReadOnlyDictionary仅与它包装的字典一样线程安全(请参阅stackoverflow.com/questions/13684143/…)。因此,这取决于下面使用的是什么字典实现。 -
您可以将这个问题视为关于
Dictionary的问题,但没有添加/删除键.. 问题仍然存在,因为从文档中不清楚“更改集合”是什么意思 -
在这种情况下,这可能会回答您的问题:Thread safety of a Dictionary<TKey, TValue>(但如果没有,请随时解释原因)。
-
这个问题和回复谈到了一个字典,键和值都永远不会改变。我问的是一个字典,其中的键没有改变,但值数据(不是参考)可能会改变
-
我想说,根据以前的 cmets,答案是“ReadOnlyDictionary 本身对情况的安全性没有影响”。所以,不知道你到底在问什么。
标签: c# multithreading thread-safety readonly-collection ireadonlydictionary