【问题标题】:How to correctly do threading?如何正确进行穿线?
【发布时间】:2011-07-08 02:37:39
【问题描述】:

我一直在研究 .Net 线程,并了解了 Threading.TaskThreading.Task.Parallel 类。现在使用Parallel 类的ForEach 方法,我在单独的线程上处理每个对象。但是我相信ForEach 方法会等待所有线程完成执行,然后再返回。这导致那些在其他线程之前完成的线程处于空闲状态。我想让这些线程不断工作。所以这就是我希望做的:

我有线程A 负责从表中选择记录,然后启动n 个工作线程来处理每条记录。

  1. 每次工作线程完成它的工作时,它都应该向线程A 请求下一条要处理的记录。

  2. 在分配记录给工作线程时,如果线程A用完,它应该返回数据库并获取更多。我猜这个分配过程必须包装在一个临界区块中。

谁能指点我适合我的场景的教程?

【问题讨论】:

    标签: c# .net multithreading thread-safety parallel-processing


    【解决方案1】:

    对于生产者消费者场景,您可以使用已经是线程安全的ConcurrentQueue

    这意味着您可以从任何 A 线程填充它,并从所有其他消费者线程中弹出要处理的项目,而无需使用锁定。

    【讨论】:

      【解决方案2】:

      您所讨论的内容通常称为“线程池”。 MSDN's "How to: Use a Thread Pool" 可能与您的兴趣相关。

      【讨论】:

        猜你喜欢
        • 2012-01-30
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多