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