如何正确地进行线程化?

时间:2011-07-08 02:37:39

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

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

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

  1. 每次工作线程完成其工作时,都应该询问线程A以处理下一条记录。

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

  3. 有人能指出我适合我的情景的教程吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

这意味着你可以从任何一个线程填充它,并弹出所有其他消费者线程的项目,而不使用锁定。