2011-09-18 103 views
0

编辑:我正在开发与.NET 3.5。如何在.NET中每次启动最多X个线程?

我有一个程序,DoSomething。 我必须启动它X次。我想使用线程..但我想每次最多使用5个线程。 所以,我可以写这样的:

for i=0 to TimesToDo -1 
     Dim t as new Thread = new Thread(Addressof MyProcedure) 
     t.Start() 

     if TotalThread > 5 then Wait() 
next i 

确定这是“伪代码”。在.NET中可能吗? 其他一些问题是:我如何获得我的线程运行的数量?是否有可能获得结束线程的“信号”?

谢谢

+0

检查这个帖子http://stackoverflow.com/questions/444627/c-thread-pool-limiting-threads – Samich

+0

在考虑等待,值得一提的是'Thread.Join'(http://msdn.microsoft.com/zh-cn/library/95hbf2ta.aspx),它会阻止调用线程,直到线程终止,同时继续执行标准COM和SendMessage抽取。“*不幸的是,这并不直接适用于你的问题,因为等待每个线程会严重限制并行性。 – Rob

+0

线程池管理器已经做到了。首选,因为它不会选择5,它选择一个在机器上运行良好的数字,匹配的CPU核心数量。 –

回答

4

假设.NET 4.0,你可以使用Parallel.For(C#代码):

var parallelOptions = new ParallelOptions {MaxDegreeOfParallelism=5}; 

Parallel.For(0, TimesToDo -1, parallelOptions, DoSomething); 
3

您的所有线程都在做同样的工作吗?如果是这样,我会建议创建5个线程,这些线程全部从相同的工作队列中读取 - 如果您使用的是.NET 4,则为BlockingCollection<T> - 然后您将项目添加到该队列中。这样可以避免在您不需要时创建线程的成本,并且一次只处理5个线程的自然限制。

相关问题