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++实现线程池的话题,就讲到这里了,关于源代码的问题,我整理好后会放在公众号(小懵白生活小趣谈)后台里面 。
推荐阅读
- 一文搞懂GoLang定时器实现原理
- 教你一段代码实现批量重命名
- 华为|卖车挑战30万辆!华为董事长:目标已很难实现 华为还是新手
- 域环境实现打印机共享
- 如何用python实现自动化办公
- 介绍一个Python 包,几行代码可实现 OCR 文本识别
- 使用多线程编程来实现并发时,需要考虑并发所带来的哪些风险呢?
- LVS三种模式的实现原理、配置及优点缺点详解
- SparkSQL的3种Join实现
- 阿里云服务器是如何实现每台服务器都是公网IP的呢?