【发布时间】:2013-02-01 02:37:23
【问题描述】:
我的情况是这样的:
多个线程必须同时写入同一个集合(add 和 addrange)。物品的顺序不是问题。 当所有线程都完成(加入)并回到我的主线程时,我需要以 foreach 样式快速读取所有收集的数据,因为所有线程都已完成,因此不需要实际锁定。
在“过去”中,我可能会在列表上为此使用读写器锁,但对于新的并发集合,我想知道是否有更好的选择。我只是不知道是哪个,因为大多数并发集合似乎都假设读者也在并发线程上。
【问题讨论】:
-
如果您使用的是 .Net 4.0 或更高版本。 ConcurrentBag
应该可以解决您的目的。如果您不关心元素的顺序和删除,我认为这是最好的。 -
我一直在研究它,但不会对并发包进行 foreach 意味着每次读取都会受到锁定惩罚吗?让老读者锁更高效?
-
@Hans 和 Philip Rieck,你说得对。这里根本没有理由使用并发集合。现在对我来说很明显,我必须旋转很多线程,这让我感到盲目和偏执。谢谢澄清:)。
标签: c# multithreading concurrency