我不確定這是否是一個愚蠢的問題,因爲我對線程瞭解不多,但能否同時觸發多個同步線程,並等待所有線程完成演戲之前?如果這是你怎麼做的?關閉多個同步線程
Q
關閉多個同步線程
1
A
回答
1
您可以使用Parallel.Invoke
。
這將並行執行提供的操作,並在所有操作完成時返回。
0
你不能真的做什麼東西在同一時間,更不用說發射線程:)(你可以一個接一個地快速發射它們,雖然有可能一個線程在最後一個之前開始解僱)。
至於在繼續之前等待它們,您可以使用Join方法,在繼續之前等待線程結束。
2
ut是否可以同時觸發多個同步線程,等待所有完成之後才能執行?
「同步線程」是一個矛盾,它們不存在。
當然你也可以啓動多個線程,並等待它們完成(Thread.Join(otherThread)
)
如果是你怎麼做呢?
很少。儘可能使用盡可能少的線程。它們是昂貴的。
確保你知道的線程池和(FX4)的任務庫,TPL
+0
謝謝,我不要太費心有關性能,這是一個難得的ocurrence和我做的唯一reaosn是因爲我必須立即多次調用Web服務 – jcvandan 2011-05-12 10:43:58
3
當然,最簡單的方法是使用.NET 4.0的任務並行庫(TPL)。
例如
Parallel.For(0, 10, x =>
// Do this in Parallel.
System.Diagnostics.Debug.WriteLine(x)
);
0
通常你會用像下面的結構做,
public class MultipleThreqadTest
{
private readonly Thread[] threads;
private readonly object locker;
private int finishCounter;
private readonly AutoResetEvent waitEvent;
public MultipleThreqadTest()
{
threads=new Thread[10];
for(int i=0;i<0;i++)
threads[i]=new Thread(DoWork);
finishCounter = threads.Length;
waitEvent=new AutoResetEvent(false);
}
public void StartAll()
{
foreach (var thread in threads)
{
thread.Start();
}
//now wait for all worker threads to complete
waitEvent.WaitOne();
}
private void DoWork()
{
//Do Some Actual work here, you may need to lock this in case you are workin on some shared resource
//lock(locker)
//{
//}
//Check if all worker thread complets
if(Interlocked.Decrement(ref finishCounter)==0)
{
this.waitEvent.Set();
}
}
}
相關問題
- 1. 同步多個線程
- 2. 多線程,線程同步
- 3. ArrayList,線程和同步 - 如何準確同步多個線程
- 4. 多線程同步
- 5. 如何通過兩個線程同步關閉套接字?
- 6. Android:線程同步:等待一個對話框關閉繼續
- 7. Java多線程未關閉線程
- 8. 關閉多線程NSDocument
- 9. OpenThread和關閉多個線程句柄
- 10. 單線程在多線程中不使用同步關鍵字
- 11. 多線程,線程間通信,同步
- 12. 多線程和線程同步
- 13. 多線程與線程佔先同步
- 14. .NET多線程同步
- 15. 同步多線程JAVA
- 16. Java - 多線程和同步
- 17. 如何同步多線程
- 18. Java多線程同步
- 19. Android,多線程,同步
- 20. Java多線程同步
- 21. 多線程同步原語
- 22. 的Java多線程同步
- 23. Java多線程同步塊
- 24. 多線程同步執行
- 25. python多線程同步
- 26. C++多線程同步
- 27. 線程與多個對象同步
- 28. 同步.NET中的多個線程4
- 29. 關於同步,同時實現多線程熟睡理髮師
- 30. 關閉多線程應用程序
這聽起來像最簡單的方法 – jcvandan 2011-05-12 10:47:10
@dormisher:它是:-) – 2011-05-12 10:47:41
乾杯人 - 將執行時間從703秒減少到200毫秒! – jcvandan 2011-05-12 10:55:22