C# 是字典<;TKey,TValue>;。如果密钥已在字典中,是否设置项[TKey]属性线程安全?
在做任何事情之前,我已经读过了,我不认为它回答了我的问题 我正在写一个更新字典值的方法。 我不会插入或删除任何键 我计划这样做:C# 是字典<;TKey,TValue>;。如果密钥已在字典中,是否设置项[TKey]属性线程安全?,c#,dictionary,thread-safety,C#,Dictionary,Thread Safety,在做任何事情之前,我已经读过了,我不认为它回答了我的问题 我正在写一个更新字典值的方法。 我不会插入或删除任何键 我计划这样做: private static void Example(Dictionary<Individual, float> dict) { var keys = dict.Keys.ToArray(); Parallel.For(0, keys.Length, i => { v
private static void Example(Dictionary<Individual, float> dict) {
var keys = dict.Keys.ToArray();
Parallel.For(0, keys.Length, i => {
var key = keys[i];
var newValue = DoHardMath(key);
dict[key] = newValue;
});
}
private静态无效示例(Dictionary dict){
var keys=dict.keys.ToArray();
Parallel.For(0,keys.Length,i=>{
var key=key[i];
var newValue=DoHardMath(键);
dict[key]=新值;
});
}
这个线安全吗?
您的问题非常具体,但是
ConcurrentDictionary
可以避免焦虑
Docos网址:
- 您的问题非常具体,但是
ConcurrentDictionary
可以避免焦虑
Docos网址:
字典
不是线程安全的。在您的情况下,它是安全的,因为您可以替换该值,而不会影响字典中的其他键/值对。如果多个线程使用同一个密钥,那么它是不安全的。如果添加或删除密钥,则不安全。记住dict[key]=newValue如果键
不存在,则code>将添加一个新条目。尽管如此,通常使用并发字典
更安全-这样,当您以后编辑代码时,不会有任何令人不快的意外,并且忘记不应该添加/删除项。不,您应该使用并发字典。您链接的问题的答案引用了“一本词典可以同时支持多个读者,只要集合未被修改。”,并且您将修改集合,因此……不清楚“修改集合”是什么意思,这就是我为什么问的原因。否。字典
不是线程安全的。在您的情况下,它是安全的,因为您可以替换该值,而不会影响字典中的其他键/值对。如果多个线程使用同一个密钥,那么它是不安全的。如果添加或删除密钥,则不安全。记住dict[key]=newValue如果键
不存在,则code>将添加一个新条目。综上所述,使用ConcurrentDictionary
,通常更安全——这样,当您以后编辑代码时,就不会有任何令人不快的意外,并且忘记了不应该添加/删除项目。