更新并发收集



我正在开发一个多线程应用程序,在那里我从外部源加载数据并将它们存储在内部集合中。通过再次加载外部源中的所有数据,这些集合每 X 分钟更新一次。没有其他添加/删除这些集合,只是阅读。

通常我会在更新期间使用锁定,就像我访问集合的任何地方一样。

问题:

在这种情况下,并发集合是否使我的生活更轻松?基本上我看到两种方法

  1. 从外部提要加载数据,然后删除不再存在的项目,添加缺失的项目并更新更改的项目 - 我想这是一个很好的解决方案,可以并发收集(不需要锁定,对吧?(,但它需要太多代码来自我这边。

  2. 只需用新集合对象覆盖旧的集合对象(例如_data = new ConcurentBag(newData(。在这里,我很确定使用并发集合根本没有任何优势,对吗?需要锁定机构。

是否有现成的解决方案,我可以使用并发集合?我不想再重新发明轮子了。

是的,对于并发集合,锁定机制存储在集合中,因此如果您new集合代替旧集合,那只会破坏目的。它们主要用于生产者 - 消费者的情况,通常与BlockingCollection<T>结合使用。如果您的生产者所做的不仅仅是添加数据,那么事情就会变得更加复杂。

不使用并发集合的好处是锁定机制不再依赖于集合 - 您可以有一个单独的同步lock object,您可以在关键部分中根据需要自由分配另一个实例。

回答你的问题 - 我不知道有任何开箱即用的机制可以做你想做的事,但我不会使用简单的lock语句来称呼"重新发明轮子"。这有点像说使用for循环是重新发明轮子。只需在非并发集合旁边有一个单独的同步对象即可。

相关内容

  • 没有找到相关文章

最新更新