线程池(不完整)

线程池部分代码

# 任务体:函数体和参数
// 定义任务结构体
using callback = void(*)(void*);
typedef struct task 
{
    callback function;
    void* arg;
}Task;



# 任务队列:任务体的队列,实现对任务体的存取
class TaskQueue
{
public:
    TaskQueue();
    ~TaskQueue();
    // 添加任务
    void addTask(Task& task);
    void addTask(callback func, void* arg);
    // 取出一个任务
    Task takeTask();
    // 获取当前队列中任务个数
    inline int taskNumber()
    {
        return m_queue.size();
    }
private:
    pthread_mutex_t m_mutex;    // 互斥锁
    std::queue m_queue;   // 任务队列
};



# 线程池类:
# 1. 对任务队列的控制  
# 2. 消费者worker:于任务队列中取任务
# 3. 管理员manager:定时检查、销毁创建线程池里的线程
class ThreadPool
{
public:
	ThreadPool(int, int);
	~ThreadPool();

	void addTask(Task task);    //添加任务
	int getBusyNumber();		
	int getAliveNumber();		//返回空闲数

private:
	static void* worker(void* arg);
	static void* manager(void* arg);
	void threadExit();

private:
	pthread_mutex_t m_lock;
	pthread_cond_t m_notEmpty;
	pthread_t* m_threadIDs;  //线程:开m_maxNum个空间,初始化m_minNum个
	pthread_t m_managerID;  //管理者线程,
	TaskQueue* m_taskQ;  //任务队列
	int m_minNum;		//最小数
	int m_maxNum;		//最大数
	int m_busyNum;		//繁忙数
	int m_aliveNum;		//空闲数
	int m_exitNum;
	bool m_shutdown = false;   //True:addTask无法添加
};



你可能感兴趣的:(linux,c++)