我有N个任务,它们是独立的(即写入不同的内存地址),但不需要完全相同的时间完成(例如2到10秒)。 我有P线程。
我可以将我的N个任务分成P个线程,并启动我的线程。 最后,最后还会有一个线程完成最后的几个任务,这不是最优的。
我还可以启动P线程,每个线程有1个任务,WaitForMultipleObjects,并重新启动P线程等(这是我目前所做的,因为创build线程的开销比任务小)。 但是,这也不能解决问题,在某一点上仍然会有P-1线程在等待最后一个线程。
有没有办法启动线程,一旦线程完成任务,继续下一个可用的任务,直到所有的任务完成?
编写Unix和Windows的应用程序
如何检测用户何时按下关机button?
在参数typedef更改时重builddynamic库
在C中编写一个可移植的命令行包装器
当我发送大量kill()命令时,我的服务器不处理所有的信号
谢谢 !
OS X UDP发送错误:55没有可用的缓冲区空间
Code :: Blocks中的OpenCV:应用程序无法正确启动(0xc00000be)
如何在Windows上的内核模式下获得进程使用的cpu时钟周期?
物品是否被杀死了?
将批处理shell脚本输出读入C#.Net程序
是的,这就是所谓的线程池。 这是一个非常普遍的做法。
http://en.wikipedia.org/wiki/Thread_pool_pattern
基本上,你创建一个任务队列(函数指针与他们的参数),并推动任务那里。 您有N个线程正在运行,执行以下循环(原理图代码):
while (bRunning) { task = m_pQueue.pop(); if (task) { executeTask(task); } else { //you can sleep a bit here if you want } }
有更多的优雅的方式来实现它(避免睡觉等),但这是它的要点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。