C ++ master / worker

时间:2009-06-29 22:12:01

标签: c++ multithreading concurrency threadpool

我正在寻找一个跨平台的C ++主/工作库或工作队列库。一般的想法是我的应用程序将创建某种Task或Work对象,将它们传递给工作主机或工作队列,这反过来又会在单独的线程或进程中执行工作。为了提供一些上下文,应用程序是一个CD开膛手,我想要并行化的任务是“rip track”,“将WAV编码为Mp3”等等。

我的基本要求是:

  • 必须支持可配置数量的并发任务。
  • 必须支持任务之间的依赖关系,以便在完成所有依赖的任务之前不执行任务。
  • 必须允许取消任务(或者至少不能阻止我将取消编码到我自己的任务中)。
  • 必须允许将状态和进度信息报告回主应用程序线程。
  • 必须适用于Windows,Mac OS X和Linux
  • 必须是开源的。

如果这个库也是特别好的:

  • 与Qt的信号/插槽机制集成。
  • 支持使用线程进程来执行任务。

通过类比,我正在寻找类似于Java的ExecutorService或其他类似的线程池库,但是在跨平台的C ++中。有谁知道这样的野兽?

谢谢!

6 个答案:

答案 0 :(得分:3)

我没有长时间使用它,我不肯定它是否完全符合您的需求,但请查看Adaptive Communications Environment (ACE)。该库允许您构造具有工作队列的“活动对象”并在其自己的线程中执行其主体,以及可以在对象中共享的线程池。然后,您可以将队列工作对象传递给活动对象以供其处理。对象可以以各种方式链接。图书馆相当繁重,有很多值得学习的东西,但是已经写了几本关于它的书籍,还有大量的在线教程信息。它应该能够做你想要的一切以及更多,我唯一关心的是它是否拥有你正在寻找的“开箱即用”的接口,或者你是否需要在它之上构建以获得你正在寻找的东西对

答案 1 :(得分:2)

我认为这需要英特尔Threading Building Blocks,这几乎可以满足您的需求。

答案 2 :(得分:2)

查看英特尔的Thread Building Blocks库。

答案 3 :(得分:1)

听起来你需要某种“时间共享系统”。

那里有一些很好的开源软件,但我不知道 如果他们有内置的QT插槽支持。

答案 4 :(得分:0)

对于你需要的东西来说,这可能是一个巨大的矫枉过正,但仍然值得一提 -
BOINC是用于此类任务的分布式框架。有一个主服务器可以执行要执行的任务以及执行其出价的工作云。它是SETI @ Home等众多项目背后的框架。

答案 5 :(得分:0)

请参阅此文章,了解如何使用C ++中的boost库创建线程:

Simple example of threading in C++

(即使标题为c,它也是一个c ++线程)

基本上,创建自己的“主”对象,该对象接受一个“可运行”对象,并在新线程中启动它。

然后你可以创建实现“runnable”的新类,并在你想要的任何旧时间将它们交给你的主跑步者。