词典(TKEY的,TValue)并发访问:最坏的情况

所以,我有Dictionary<string, SomeClass>这将在很大程度上由多个并发线程访问-有的会写,大多数人会阅读。 没有锁,没有同步 - 工作线程不会进行检查 - 简单的读或写。 唯一的保证是没有两个线程将写有相同的密钥值。 现在的问题是会这样的数据结构损坏这种方式? 由损坏我的意思是不是即使一个线程工作了。

--------------解决方案-------------

在最坏的情况包括:

  • 的NullReferenceException或IndexOutOfRangeException抛出一个Dictionary <,>的方法。
  • 任意数据量的丢失 。 如果两个线程试图在同一时间来调整字典<,>表,他们可以踩对方,搞砸了,而丢失数据。
  • 错误的答案是从字典<,>读返回

基本上,字典<,>可以做任何事情不好,你能想到的,由CLR规定的范围之内。 据推测,你仍然不会打破类型安全或破坏堆,你可以在一个本地编程语言。 也许,反正:-)

可能这个数据结构损坏这种方式?

是的,最有可能的,你会得到一个IndexOutOfRange或类似的异常。
甚至当你赶上并忽略异常,你就不会得到可靠的数据了。 无论重复和遗漏值是可能的。

因此,只要不这样做。

如果您正在访问从多个线程的集合,这将是最安全的使用线程安全的品种之一是.NET 4,如ConcurrentDictionary

分类:C# 时间:2015-03-15 人气:0
本文关键词: 并发
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.376 (s). 10 q(s)