5.1 线程池V1.0 基础版本
1 初始化线程池
2 启动所以线程
std::vector<std::thread *> threads_;
unique_lock<mutex> lock(mutex_);for(int i = 0;i < thread_num_; i++) {auth th = new thread(&XThreadPool::Run, this);threads_.push_back(th);}
3 准备好任务处理基类和插入任务
class XTask{public:// 执行具体的任务virtual int Run() = 0;}
存储任务的列表
std::list<XTask*> tasks_;
插入任务,通知线程池处理
unique_lock<mutex> lock(mutex_);tasks_.push_back(task);condition_.notify_one();
4 获取任务接口
通过条件变量堵塞等待任务
// 获取任务XTaskType XThreadPool::GetTask(){unique_lock<mutex> lock(mutex_);if(tasks_.empty()){condition_.wait(lock); // 阻塞 等待通知}if(is_exit_) {return nullptr;}if(tasks_.empty()){return nullptr;}auto task = tasks_.front();tasks_.pop_front();return task;}
5 执行任务线程入口函数
void XThread::Run(){while(!IsExit()){// 获取任务autotask= GetTask();if(!task){continue;}try{task->Run();}catch(...){cerr << "XThread::Run() exception" << endl;}}}
