手写线程池 发表于 2022-03-11 | 分类于 多线程/多进程 , 手写线程池 | 手写线程池 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include<vector>#include<string>#include<list>#include<thread>#include<condition_variable>using namespace std;class ThreadPool {public: ThreadPool(int threadnum):started(false),thread_num(threadnum) { //构造函数声明未启动和线程数量} ~ThreadPool(){ //析构函数是停止,阻塞所有线程并将其从线程列表剔除后删除,清空线程列表。 stop(); for (int i = 0; i < thread_num; ++i) { threadlist[i]->join(); } for (int i = 0; i < thread_num; ++i) { delete threadlist[i]; } threadlist.clear(); //清空线程列表} void threadFunc(){}//线程执行函数,可自定义。int getThreadNum() { return thread_num; }void start() { //启动线程池函数,将num个线程绑定threadFunc自定义函数并执行,加入线程列表 if (thread_num > 0) { started = true; for (int i = 0; i < thread_num; ++i) { thread* pthread = new thread(&threadFunc, this); threadlist.push_back(pthread); } }}void stop() { //暂时停止线程,并由条件变量通知所有线程。 started = false; condition.notify_all(); //用于唤醒所有等待条件变量的线程。}private: int thread_num; bool started; vector<thread*> threadlist; condition_variable condition;}; -------------本文结束 感谢阅读------------- 本文作者: HReina 本文链接: http://hreina.com/2022/03/11/%E6%89%8B%E5%86%99%E7%BA%BF%E7%A8%8B%E6%B1%A0/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!