【发布时间】:2010-08-19 06:38:41
【问题描述】:
我在下面有这段代码,我在其中生成了几个线程,通常大约 7 个,然后加入它们以等待全部完成:
List<Thread> threads = new List<Thread>();
Thread thread;
foreach (int size in _parameterCombinations.Keys)
{
thread = new Thread(new ParameterizedThreadStart(CalculateResults));
thread.Start(size);
threads.Add(thread);
}
// wait for all threads to finish
for (int index = 0; index < threads.Count; index++)
{
threads[index].Join();
}
当我检查这一点时,大多数时候只有一两个线程同时运行,当我重新运行应用程序时只有一两次,所有线程都执行了。
有没有办法强制所有线程开始执行?
非常感谢。
【问题讨论】:
-
由于我们不知道 CalculateResults 的定义,因此很难判断此方法是否会在某些时候阻塞,但这可以解释观察到的行为。
-
您的机器上有多少个内核?只有这么多线程实际上可以并行运行。
-
计算任务需要多长时间?
-
卢克,这是不正确的。线程可以被执行和冻结。
-
@luke:正如 Adibe 指出的那样,这是不正确的。即使是单核且没有超线程,操作系统也会为每个线程提供自己的切片。
标签: c# .net multithreading execution