线程池的原理很简单,就是预先建立些空闲线程,并把它们投入睡眠中。当有任务到达时,就唤醒一个线程来处理,处理完后放回线程池中。因为线程池对空闲线程的维护,所以避免了对线程创建的开销,当频繁使用线程且处理工作量很小的情况下,使用线程池可以有效的提升系统性能。
2 线程池实现
线程池的实现主要分为四部分,线程的创建、添加任务到线程池中、子线程取出任务进行处理以及把执行完成的任务写回主线程。
3 双队列线程池程序实现:
头文件:
18 #ifndef __CTHREAD
19 #define __CTHREAD
20
21 #include<queue>
22 #include<string>
23 #include<pthread.h>
24 #include<iostream>
25 using namespace std;
26
27
28 class CTask
29 {
30 protected:
31 string m_strTaskName;
32 void *m_ptrData;
33 public:
34
35
36 CTask(){}
37
38 CTask(string taskName)
39 {
40 this->m_strTaskName=taskName;
41 m_ptrData=NULL;
42 }
43 virtual int Run()=0;
44 void SetData(void *data); //设置任务数据
45
46 };
47
48
49 class CThreadPool
50 {
51 private:
52 int m_threadNum; //线程数量
53
54 static pthread_mutex_