【发布时间】:2011-08-17 23:23:45
【问题描述】:
我想要一个 List<T> 的实现作为一个可以毫无疑问地线程安全使用的属性。
类似这样的:
private List<T> _list;
private List<T> MyT
{
get { // return a copy of _list; }
set { _list = value; }
}
我似乎仍然需要返回一个集合的副本(克隆),所以如果我们在某个地方迭代集合并且同时设置了集合,那么不会引发异常。
如何实现线程安全的集合属性?
【问题讨论】:
-
使用锁,应该这样做。
-
可以使用
IList<T>(与List<T>相比)的线程安全实现吗? -
你检查过SynchronizedCollection<T> 吗?
-
使用 BlockingCollection 或 ConcurrentDictionary
-
属性后面的对象需要做哪些操作?您是否可能不需要
List<T>实现的所有功能?如果是,那么您能否提供一个您需要的界面,而不是询问List<T>已经拥有的所有内容?
标签: c# collections properties thread-safety