现有的线程池C实现

时间:2011-06-09 18:23:09

标签: c multithreading open-source pthreads threadpool

您建议在C中使用pthreads线程池进行哪些开源实现?

此实施的附加要点是:

  • 轻量级:glib,APR,NSPR和其他产品都有很大的买入,我宁愿只有2个文件(标题和实现)。
  • 在多个平台(Linux,BSD,Mac OS X等)上测试。
  • 仍然保持着。

4 个答案:

答案 0 :(得分:22)

我致力于制作我能够使用的东西,并且我已经在github上发布了它:它被称为threadpool

答案 1 :(得分:9)

如果你的目标是轻量级,那么你想要的最后一件事就是预先编写的,超级通用的,基于高级抽象的实现。自己实现一个适合你的特定任务的线程池是相当简单的,但你也可能会质疑你是否真的需要一个线程池,或者你是否可以根据需要创建和销毁线程。

在不了解有关您的申请的更多细节的情况下,我无法提供更具体的建议。但您可能会发现有用的工具是:

  • 条件变量
  • 信号灯
  • 受互斥锁保护的作业队列
  • POSIX消息队列

答案 2 :(得分:3)

Here is an implementation具有以下功能:

  • ANSI C和POSIX兼容
  • 最小但功能强大的API
  • 来自用户的同步
  • 完整文档

答案 3 :(得分:2)

我曾经使用this,这本身并不是官方实施。它确实按照你的要求使用pthreads,并且应该给你一些你需要做的事情的想法。 (有关如何编译的说明,请参阅threadpool.hthreadpool.cthreadpool_test.cMakefile。)您显然必须进行一些重构it's original intention可能与你的不同。它实际上评论得相当好。

尽管这偏离了原来的问题,我还想提一下,最新的C标准,非正式的C1X(参见维基百科,超链接限制),已计划支持线程N1570(google it,超链接限制再次!) (15年7月31日)。

根据我的经验,一些个人建议是确保您的应用程序可以实际并行运行,如果创建新线程的开销太高而不能没有一个线程池。就我个人而言,我在这两个部分都犯了错误,实际上我的实现比单线程应用程序慢。此外,您可能希望了解不同的问题,包括缓存锁定和未命中,这实际上会降低应用程序的性能。

我现在可能正在喋喋不休,但祝你好运。