是LinkedList实现.Net线程安全吗?
其实我正在研究一个应用程序,它使用多个线程来处理任务数量,父应用程序接收任务的输出,后来被写入文件,目前我使用arraylist来追加输出,但是从队列中移除项目时发生速度缓慢。 我想转换arraylist部分链接列表优化读取和清除,任何人都可以确认我们 如果linkedList .Net的实现是线程安全的,甚至使用arraylist是线程安全?是LinkedList实现.Net线程安全吗?
的reference指出:
这种类型不是线程安全的。如果需要通过多线程访问 LinkedList(Of T),您需要 实现自己的同步 机制。
甲链表(OF T)可以支持 多个读者同时,只要 作为收集不被修改。 尽管如此,通过 集合列举本质上不是线程安全的过程。在罕见的 情况下,枚举与012写入访问竞争 ,集合 必须在整个枚举过程中被锁定。要允许 由多个线程访问 读取和写入,您必须执行您自己的同步 。
编辑:
至于ArrayList中,该reference状态:
公共静态(在Visual Basic中的Shared)这种类型的 成员都是线程安全的。 任何实例成员不是 保证是线程安全的。
只要 集合没有被修改,ArrayList可以同时支持多个 阅读器。若要 保证ArrayList的线程安全,则必须通过 同步方法返回的包装完成所有操作 。
枚举整个集合是 本质上不是线程安全的 过程。即使集合是 同步,其他线程仍然可以 修改集合,这将导致枚举器引发 引发异常。 要在枚举中保证线程安全,您可以在整个 枚举期间锁定 集合,或者捕获由其他 线程所做更改产生的异常 。
既然您已将它标记为C#4,请使用BlockingCollection<T>
。
它是线程安全的,并且允许您在需要时节制流量。
这个集合类是为这个任务设计的。但是,最终写入文件时,集合的性能应该无关紧要。
命名空间System.Collections.Concurrent下的任何线程安全集合都应该为您完成这项工作。然而,从性能的角度来看,我认为这些性能不如Array好,因为考虑到会有一些同步化开销。你的两个请求的线程safetiness和性能可能不是在同一时间achieveable,您可能需要达成某种折中点
如需更多信息,请参阅http://msdn.microsoft.com/en-us/library/dd267265.aspx
ArrayList的将是缓慢反正因为装箱/拆箱,你不能使用处理特定类型的集合吗? – 2011-04-26 11:01:15
我有成千上万的记录收到/秒,这意味着我必须有一点记忆意识:) – CodeWrite 2011-04-26 11:04:02
如果列表存储ValueTypes只会有拳击。我没有从Q中读到。 – 2011-04-26 11:12:15