我有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 } }
有更多的优雅的方式来实现它(避免睡觉等),但这是它的要点。
总结以上是内存溢出为你收集整理的multithreading独立的任务全部内容,希望文章能够帮你解决multithreading独立的任务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)