多线程独立任务

时间:2012-03-13 22:56:37

标签: c++ windows multithreading

我有N个任务,它们是独立的(即,在不同的内存地址写入),但不需要完全相同的时间来完成(比如2到10秒)。我有P线程。

我可以将我的N个任务划分为P个线程,并启动我的线程。最终,最后还会有一个线程来完成最后几个任务,这不是最佳的。

我还可以启动每个1个任务的P线程,WaitForMultipleObjects,重新启动P线程等(这就是我目前所做的,因为与任务相比,创建线程的开销很小)。但是,这也没有解决问题,在某些时候仍然会有P-1线程等待最后一个。

有没有办法启动线程,一旦线程完成任务,继续执行下一个可用任务,直到完成所有任务?

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,它被称为线程池。这是一种非常普遍的做法。

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
   } 
}

有更优雅的方式来实现它(避免睡眠等),但这是它的要点。