C# Dictionary 是不是有可能返回一个完全错误的值。
Posted
技术标签:
【中文标题】C# Dictionary 是不是有可能返回一个完全错误的值。【英文标题】:Is it possible C# Dictionary to return a completly wrong value.C# Dictionary 是否有可能返回一个完全错误的值。 【发布时间】:2015-10-21 08:32:35 【问题描述】:我在多线程环境中有一个 c# 字典。我正在使用 TryGetValue 进行无锁阅读,同时字典正在重组。 是否有可能获得与此键无关的完全不同的值?我的意思不仅仅是一个不是最新的值,而是一个完全错误的值,对应于不同的键。
【问题讨论】:
先展示你的作品。 多线程且无锁?是的,任何事情都可能发生。算你幸运机器没有炸毁。 @Corak 如果不是 Web 应用,请不要忽略应用域隔离等。 @Mathematics - 我支持“任何事情都可能发生”。引用Eric Lippert:“只要拿锁。” 完全看代码... 【参考方案1】:简短回答:是的!
长答案:字典默认不是线程安全的。如果你需要一个线程安全的,你可以使用ConcurrentDictionary
https://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx
还可以查看有关线程安全集合https://msdn.microsoft.com/en-us/library/dd997305(v=vs.110).aspx 的 Microsoft 参考
【讨论】:
你能备份一下吗?我知道List
如果在迭代时修改集合会引发错误 - 你确定 Dictionary 没有做任何类似的事情吗?
@Default 您所描述的行为确实发生在 List
和 Dictionary
上,但它与线程安全访问没有直接关系 - 这是“可能”结束的两件不同的事情出现相同的错误/异常。但我以更一般的方式理解了 Dim_Ka 的问题以上是关于C# Dictionary 是不是有可能返回一个完全错误的值。的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中是不是有像 Dictionary<> 这样的类,但只有键,没有值?