2015-10-21 43 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