编写了一个最基本的线程池类,处理用c_work表示的工作任务。C++还很不熟练,欢迎会C++的提出宝贵的修改意见。
程序有注释,所以应该很好读懂。测试程序在下面。
///
//线程池类
///
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
const int DEFAULT_MAX_THREAD_NUM = 10;
const int MAX_WORK_NUM = 100000;
//c_worker类
class c_work
{
public:
c_work():process(NULL), arg(NULL), next(NULL){}
c_work(void *(*prcss)(void *), void *arg):
process(prcss), arg(arg), next(NULL) {}
~c_work();
void *(*process)(void *);
void *arg;
unsigned char type; //最高位表示arg是否需要delete操作
c_work *next;
};
c_work::~c_work()
{
unsigned char ifdel = type >> 7;
if (ifdel)
{
delete arg;
arg = NULL;
}
}
class c_thread_pool
{
public:
c_thread_pool();
c_thread_pool(const int max_thread_num);
~c_thread_pool();
int add_work(c_work work);
static void *thread_rout