C++实现线程池( 二 )


class ThreadPool{using Task = std::function<void()>;public:ThreadPool();~ThreadPool();bool Init_ThreadPool();//初始化线程bool Add_task(const Task&t);//添加任务void End_threadpool();//销毁线程int thread_num;//当前的线程数量int task_numble;//任务队列protected:void runtask();void Expand_thread();bool Destroy_thread();int id;private:int max_thread;//初始化线程数量int max_queue;//初始化 任务队列数量std::vector<std::thread> pool;// 线程池、任务队列std::queue<Task>task ;      std::mutex _mutex ;//互斥锁条件变量std::condition_variable condition;bool stop;//停止标志位int key;//目前正在执行任务的线程数量 };其中,~ThreadPool()的代码实现如下:
ThreadPool::~ThreadPool(){End_threadpool();}void ThreadPool::End_threadpool(){stop=true;//停止读取任务while(thread_run){}//等待线程还没有执行完的任务for(int i =0 ;i<pool.size();i++)//销毁线程pool[i].join() ;  std::queue<Task> empty;swap(empty,task);//清空任务队列pool.clear(); //清空线程池}至此,线程池类封装就实现了,其余功能函数在这就不多讲了,有兴趣的同学可自行完成 。
好了,今天关于C++实现线程池的话题,就讲到这里了,关于源代码的问题,我整理好后会放在公众号(小懵白生活小趣谈)后台里面 。




推荐阅读