在学习多线程的时候我们已经知道了像Java、C#这种更高级的语言已经提供了线程池给我们使用,我们也可以直接用就行了。但是在C/C++中,我们却没有一个现成的线程池可以用。
线程池的好处我们也都知道了,我们可以通过线程池对线程资源重用,线程的创建和销毁的开销是巨大的,而通过线程池的重用大大减少了这些不必要的开销。
正好最近在一门课程中需要用到一个发挥线程池作用地方,然而需要用pthread来维护线程,所以就找到了别的博客中的pthread线程池实现,正好学习一下线程池底层的工作原理。
原博客:https://blog.csdn.net/jcjc918/article/details/50395528
原博客中的线程池是纯C语言写的,虽然有面向对象的思想,但是用在我们别的地方代码中还是不太方便,所以我将其改造了一下,使用C++编写,更易于使用。
在使用前先创建对象 PthreadPool pool; 然后再初始化线程池 pool.Init(4); 在线程池中加入任务 pool.AddTask(&dummy_task) 在程序结束时销毁线程池 pool.Destory(); 销毁线程池可以提供参数
enum PthreadPool_Shutdown { graceful_shutdown = 1, // 等待线程结束后关闭 immediate_shutdown = 2 // 立即关闭 };
源码和注释已经使用方法可以看我GitHub中
https://github.com/JunhuaiYang/PthreadPool
这个只是最简单的线程池,以后还可以增加维护线程的操作,设置核心线程,最大线程数,设置超时、增加定时线程等等。以后有需要可以根据这个简单的轮子改造就可以实现。