Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 基于pthread的线程池,C++实现

最近项目需要用到线程池,以前没接触过,断断续续学了两三个星期吧先在网上找了一个用C实现的,例子挺多,不过我只看了一个http://www.linuxidc.com/Linux/2013-01/77619.htm我觉得写得比较简洁易懂项目是C++写的,用的ACE框架,而且系统不算小,如果直接用C的话可能会破坏系统原有的封装和扩展性可能会用ACE的ACE_TASK来实现线程池,但在此之前我想先自学一下基于pthread的C++的线程池实现在网上也找到挺多C++的例子,不过都不全,有下到一个源码(网址忘记保存了,下次找到再补上)但完全没有讲解,就自己仿着重写了一个声明:本文适合用过pthread和一定的C++面向对象编程经验的人。本人菜鸟,难免错漏,望能指正本代码在Ubuntu12.04下用Eclipse for c++编写,编译的时候需要添加pthread的库由于代码比较多,因此我先贴一个大致的流程图上来1.在main函数中新建一个MyThreadPool对象,并对其进行初始化,新建N个子线程2.子线程里面循环判断成员m_pJob是否为空,不为空则向下执行,运行m_pJob完毕后让该子线程从BusyList移到IdleList3.main函数中新建Job对象(你真正想运行的东西),并把它加入线程池中,并与某子线程绑定,同时让该子线程从IdleList移到BusyList小结一句:其实在线程池中Busy与Idle线程的本质区别是其成员job是否为空代码本来不算多,但因为有多个类,所以看起来会比较辛苦,先贴上类图接下来正式贴代码,注释不多,但也不复杂代码比较多,但重点看MyThread,MyWorkThread和MyThreadPool这3个类就行了首先是MyThread类MyThread.h#ifndef MYTHREAD_H_
#define MYTHREAD_H_#include <cassert>
#include "pthread.h"class MyThread {public:
 MyThread();
 virtual ~MyThread();
 virtual void Run(void) = 0; bool  Create(MyThread* thread); unsigned long  GetThreadID(void){return m_ThreadID;}protected:
 static void*  ThreadRoutine(void*);private:
 pthread_t*  m_pThread;
 unsigned long  m_ThreadID;};#endif /* MYTHREAD_H_ */