字典(Of TKey,TValue)并发访问:最糟糕的情况

ren*_*ren 2 c# concurrency

因此,我Dictionary<string, SomeClass>将通过多个并发线程大量访问 - 有些将写入,大多数将读取.没有锁,没有同步 - 工作线程不会进行任何检查 - 只需读取或写入.唯一的保证是没有两个线程会用相同的密钥写入值.问题是这种数据结构会以这种方式被破坏吗?通过损坏,我的意思是即使使用一个线程也不再工作了.

Hen*_*man 8

这种数据结构会以这种方式被破坏吗?

是的,您很可能会获得IndexOutOfRange或类似的异常.
即使您捕获并忽略异常,也不会再获得可靠的数据.重复和缺失值都是可能的.

所以就是不要这样做.


Igo*_*sky 6

最糟糕的情况包括:

  • 抛出Dictionary <,>方法的NullReferenceException或IndexOutOfRangeException.

  • 丢失任意数量的数据.如果两个线程同时尝试调整Dictionary <,>表的大小,它们可能会相互踩踏,搞砸并丢失数据.

  • 从Dictionary <,>中读取错误的答案.

基本上,Dictionary <,>可以在CLR强加的范围内做任何你能想到的坏事.据推测,您仍然不会像在本机编程语言中那样破坏类型安全性或破坏堆.可能,反正:-)