【问题标题】:C# Concurrent Data Structure which can be Iterated through可以迭代的 C# 并发数据结构
【发布时间】:2014-11-11 11:04:22
【问题描述】:

我正在寻找一种可以迭代的线程安全并发数据结构。顺序对我来说并不重要。

我想要一个CollectionObjects

一个线程将遍历这个集合,不断调用每个对象Object.Add(Item)

例如:

 Collection<Object> collection = new Collection<Object>();

 //Run On New thread
 while(tasksAvaliable)
 {
  foreach(var item in collection)
  {
   item.Add(task);    //I get tasks from a Concurrent Queue
  }
 }

在另一个线程/计时器中,它将尝试尝试从集合中添加、编辑、删除这些对象。 (但频率低于其他线程)

我可以使用什么收藏?我目前正在使用并发包。但我不确定当我在其上使用 foreach 时,集合中的每个 Object 都会收到我在 foreach 循环中提供的 Task

我在想我可以使用普通的List&lt;Object&gt; 并在我添加、编辑或从中删除对象时简单地锁定它。但是,我不使用的对象将被阻止。我宁愿错过,即我更喜欢细纹锁。

【问题讨论】:

  • 目前还不清楚您要在这里做什么。你能给我们一些更具体的信息吗?如所写,您将多次将task 添加到每个item,除非那些item 引用已从集合中删除。 可能 ConcurrentBag&lt;T&gt; 会做你想做的事,但我的经验是它通常不是大多数问题的解决方案。此外,您应该考虑使用BlockingCollection 而不是ConcurrentQueue 来收集任务。

标签: c# multithreading collections concurrency


【解决方案1】:

IList 上创建您自己的类(包装器),提供线程安全访问或尝试使用ConcurrentBag&lt;T&gt;

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多