如何在C中实现线程池?

K-R*_*RAN 8 c c++ pthreads threadpool

我用C++编程,但我只使用pthread.h,没有boost或C++ 11线程.

所以我试图使用线程,但基于我之前的一个问题(链接),这似乎不可行,因为线程在完成任务后立即终止,并且使用线程池实现的一个更普遍的原因是通过将这些线程重用于多个任务来减少线程创建开销.

那么在C中实现它的唯一其他方法是使用fork(),还是从主进程到子进程创建管道?或者有没有办法在线程和它们的父级之间建立一个我不知道的管道?

提前谢谢了!

Jer*_*fin 6

是的,您可以在线程之间创建一个线程安全的队列.然后,池中的线程将坐在循环中,从队列中检索项目,执行它需要的任何内容,然后返回并获取另一个项目.

这通常在C++中更简单/更简单,因为它更容易在某些接口上达成一致(例如,operator()执行任务代码的重载),但在基本层面上,您可以在C中执行所有相同的操作(例如, ,task您放入队列的每个结构都将包含一个指向函数的指针,以执行该任务的工作.

在您的情况下,由于您使用的是C++,因此使用重载operator()来完成工作可能更容易.task结构的其余部分(或您选择调用它的任何内容)将包含所需的任何数据,等等.