2015-10-21 44 views
1

我有一个多线程环境中的c#字典。我正在使用TryGetValue进行无锁阅读,同时字典正在重新组织。 是否有可能得到一个完全不同的值与这个键无关?我的意思不只是一个不是最新的值,而是一个完全错误的值对应于不同的关键。是否有可能C#字典返回完全错误的值。

+7

微软参考先让你的工作。 –

+0

多线程和无锁?是的,任何事都可能发生。数你自己幸运的机器没有炸毁。 – Corak

+0

@Corak如果它不是一个Web应用程序,请不要忽略应用程序域隔离等。 – Mathematics

回答

3

简答:是!

长答案:字典默认情况下不是线程安全的。如果你需要一个线程安全的,你可以使用ConcurrentDictionaryhttps://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx

而且看看对线程安全的集合https://msdn.microsoft.com/en-us/library/dd997305(v=vs.110).aspx

+1

你能支持这个吗?我知道如果在迭代集合的时候'List'会抛出一个错误 - 你确定Dictionary没有做类似的事情吗? – Default

+0

@Default你所描述的行为确实发生在List和Dictionary中,但它与线程安全访问没有直接关系,这是两个不同的事情,它们可能以相同的错误/异常结束。但我用更一般的方式理解了Dim_Ka的问题 – derape