我的目标是编写一个程序,根据给定的用户输入处理任意数量的任务.
假设在这种情况下,任务数量为1000.
现在,我希望能够生成动态数量的线程并逐个开始处理任务.
我认为我需要使用"同步"方法,而不是"异步"方法,以便在一个任务出现问题的情况下,我不希望它减慢其余任务的完成速度.
我将用什么方法来实现上述目标?信号灯?线程池?如何确保线程不会尝试启动已由另一个线程处理的任务?"锁定"会处理这个吗?
我们将非常感谢代码示例和/或指向正确方向的网站链接.
编辑: MSDN Fibonacci示例的问题是waitall方法最多只能处理64个等待.由于1000项任务,我需要更多.如何解决这种情况而不会造成死锁?
Jon*_*eet 10
这些任务是独立的吗?如果是这样,你基本上需要一个生产者/消费者队列或一个自定义线程池,它们对同一个东西实际上是不同的视图.您需要能够将任务放入队列中,并让多个线程能够从该队列中读取.
我在MiscUtil中有一个自定义线程池,或者在我的线程教程中有一个简单的(由于年龄而非通用)生产者/消费者队列(大约在本页的一半).
如果这些任务合理地长时间运行,我不会使用系统线程池 - 它会产生比你想要的更多的线程.如果您使用的是.NET 4.0 beta 1,则可以使用Parallel Extensions.
我不太确定你的评论WaitAll......当你完成所有事情的时候,你是否想要解决?在生产者/消费者队列的情况下,这可能涉及在队列中具有某种"停止"条目(例如,消费线程理解为意味着"退出"的空引用)然后添加"WaitUntilEmpty"方法(应该相当容易实现).请注意,您不需要等到最后一个项目被处理,因为它们都是停止信号......当队列清空时,所有实际工作项目肯定都会被处理掉.
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |