启动线程并等待它们全部完成

时间:2011-09-06 17:20:06

标签: c# multithreading

我有以下代码(C#):它是否正确?

Thread[] threads = new Thread[totalThread];

for (int i=0; i<totalThread; i++) {
   threads[i] = new Thread(new ThreadStart(Work));
}

sw.Start();

for (int j=0; j<num_threads; j++) {
   threads[j].Start();
}


for (int k=0; k<num_threads; k++) {
   threads[k].Join();    
}

sw.Stop();

sw是秒表,work是一种方法。我想用这几个线程来计算这个方法,但整个事情都冻结了(好像它没有加入)。我需要知道我的线程处理是否良好,或者我是否搞砸了。如果是后者,很明显我的问题在于我正在调用的方法,而不是在线程mgmt中。感谢。

3 个答案:

答案 0 :(得分:1)

因为你提到过冻结。尝试检查您的Work方法并查找死锁。另外,在Join调用上添加一些超时机制。

答案 1 :(得分:0)

你可以摆脱.Join循环并在每个线程中使用ManualResetEvent。

然后,您将等待ManualResetEvents全部发出信号。

答案 2 :(得分:0)

它完美无缺。我发现num_threads / totalThread没有任何其他问题。请注意,如果totalThread很大(对于每个CPU核心,我的意思是大于1-2),您应该使用ThreadPool