Dictionary(Of TKey,TValue)并发访问:最糟糕的情况
本文关键字:情况 访问 并发 Of TKey TValue Dictionary | 更新日期: 2023-09-27 18:24:50
所以我有Dictionary<string, SomeClass>
,它将被多个并发线程大量访问——有些会写,大多数会读。没有锁,就没有同步——工作线程将不进行检查——只进行读取或写入。唯一的保证是不会有两个线程使用相同的键写入值。问题是,这种数据结构会以这种方式被破坏吗?我所说的损坏是指即使只有一个线程也不再工作。
这个数据结构会以这种方式被破坏吗?
是的,您很可能会得到IndexOutOfRange或类似的异常
即使您捕捉并忽略异常,也不会再获得可靠的数据。重复值和缺失值都是可能的。
所以不要这样做。
最坏的情况包括:
-
从字典中抛出的NullReferenceException或IndexOutOfRangeException方法
-
丢失任意数量的数据。如果两个线程试图调整Dictionary的大小<,>同时,他们可以互相践踏、搞砸和丢失数据。
-
读取字典<,>会返回错误答案。
基本上,字典<,>在CLR规定的范围内,你可以做任何你能想到的坏事。据推测,您仍然不会像在本机编程语言中那样破坏类型安全或损坏堆。可能,无论如何:-)
如果您从多个线程访问集合,那么在.Net 4中使用一个线程安全变体是最安全的,例如ConcurrentDictionary