【发布时间】:2012-01-23 01:47:55
【问题描述】:
我们如何知道一个方法是否是线程安全的
例如,如果我检查http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx,则没有任何迹象表明它是线程安全的。
【问题讨论】:
-
假设一个类不是线程安全的,除非它是这样记录的。
标签: .net multithreading generics collections thread-safety
我们如何知道一个方法是否是线程安全的
例如,如果我检查http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx,则没有任何迹象表明它是线程安全的。
【问题讨论】:
标签: .net multithreading generics collections thread-safety
不,它们不是线程安全的(不执行您自己的锁定)。
改用Concurrent 集合之一。
System.Collections.Concurrent 命名空间提供了几个 应该使用的线程安全集合类来代替 System.Collections 中的相应类型和 System.Collections.Generic 命名空间,只要有多个线程 同时访问集合。
整个List<T> 类的文档有一个关于线程安全的部分:
这种类型的公共静态(在 Visual Basic 中为共享)成员是线程安全的。不保证任何实例成员都是线程安全的。
【讨论】:
List 有 static 方法,它们将是线程安全的,因为它们不会改变任何全局状态。在没有同步的情况下在线程之间共享List 的实例是不安全的,因为您总是需要调用它们的实例方法才能实际使用它们。
SynchronizedCollection<T>