[英]Is ICollection<T>.Add ThreadSafe?
不, Collection<T>.Add
不是线程安全的。
MSDN通常在类文章而不是单个方法中介绍线程安全。 即收
一个Collection可以同时支持多个阅读器 ,只要不修改Collection即可。 即使这样,通过集合枚举本质上也不是线程安全的过程。 为了保证枚举期间的线程安全,您可以在整个枚举期间锁定集合。 要允许多个线程访问该集合进行读写,必须实现自己的sync 。
请注意,您不能说接口的方法是否是线程安全的,因为接口没有定义任何线程安全要求,它仅指定方法签名。 您需要检查每个单独的实现,如果它们在线程安全性方面有任何特殊保证。
不, BindingList.Add
方法不是线程安全的。
在该类的文档中,您可以在线程安全下找到以下标准短语:
“此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。”
这意味着该类没有任何线程安全方面的考虑。
您需要同步对BindingList
实例的所有访问。 您可以将其与lock
关键字一起使用:
lock(_sync) {
myBindingList.Add(something);
}
变量_sync
引用的对象用作锁的标识符,因此访问该列表的所有代码都必须对锁使用相同的引用。 通常使用对象实例:
private object _sync = new Object();
当多个线程同时访问集合时,System.Collections.Concurrent命名空间提供了几个线程安全的集合类,这些类应代替System.Collections和System.Collections.Generic命名空间中的相应类型。
http://msdn.microsoft.com/en-us/library/system.collections.concurrent.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.