【问题标题】:Are generic.list and generic.dictionary thread safe in .net.net 中的 generic.list 和 generic.dictionary 线程安全吗
【发布时间】:2012-01-23 01:47:55
【问题描述】:

我们如何知道一个方法是否是线程安全的

例如,如果我检查http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx,则没有任何迹象表明它是线程安全的。

【问题讨论】:

  • 假设一个类不是线程安全的,除非它是这样记录的。

标签: .net multithreading generics collections thread-safety


【解决方案1】:

不,它们不是线程安全的(不执行您自己的锁定)。

改用Concurrent 集合之一。

Thread-Safe Collections

System.Collections.Concurrent 命名空间提供了几个 应该使用的线程安全集合类来代替 System.Collections 中的相应类型和 System.Collections.Generic 命名空间,只要有多个线程 同时访问集合。

【解决方案2】:

整个List<T> 类的文档有一个关于线程安全的部分:

这种类型的公共静态(在 Visual Basic 中为共享)成员是线程安全的。不保证任何实例成员都是线程安全的。

【讨论】:

  • 这可能是真的,这是几乎每个(如果不是每个).NET 类型的样板文档。
  • 很高兴指出。这就解释了为什么没有 concurentList。列表已经并发。 +1
  • 其实没有。没有迹象表明它是线程安全的。 List 似乎不包含任何静态方法。
  • @JimThio 这不是文档的意思。这意味着如果Liststatic 方法,它们将是线程安全的,因为它们不会改变任何全局状态。在没有同步的情况下在线程之间共享List 的实例是安全的,因为您总是需要调用它们的实例方法才能实际使用它们。
猜你喜欢
  • 2013-06-10
  • 2010-09-28
  • 2011-08-02
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多