我有一个主线程,它生成大约 20 个工作线程。
我需要停止主线程,直到所有其他线程完成。
我知道(线程)。加入。但这仅适用于一个线程。
多个连接会像这样损害性能。
t1.Join()
t2.Join()
...
t20.Join()
因为程序会一一等待每个停止。
我怎样才能做到这一点
主线程等待所有一组线程结束?
你真的应该调查一下任务并行性(任务并行库) http://msdn.microsoft.com/en-us/library/dd537609.aspx。它使用线程池,但也管理任务窃取等。
Quote: "TPL 动态扩展并发程度,以最有效地使用所有可用的处理器。此外,TPL 还处理工作分区、ThreadPool 上的线程调度、取消支持、状态管理和其他低级细节。" on 任务并行库 http://msdn.microsoft.com/en-us/library/dd460717.aspx
你可以这样使用它:
Task[] tasks = new Task[3]
{
Task.Factory.StartNew(() => MethodA()),
Task.Factory.StartNew(() => MethodB()),
Task.Factory.StartNew(() => MethodC())
};
//Block until all tasks complete.
Task.WaitAll(tasks);
或者,如果您使用某种循环来生成线程:
数据并行(任务并行库) http://msdn.microsoft.com/en-us/library/dd537608.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)