2011-09-18 102 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個線程的自然限制。

相關問題