线程池 发表于 2019-06-17 更新于 2019-10-20 c++11 线程池实现以及示例123456789101112131415161718192021222324252627282930313233343536#include "ThreadPool.h"ThreadPool::ThreadPool(size_t threads) : stop(false){ //创建n个线程,每个线程等待是否有新的task, 或者线程stop(要终止) for (size_t i = 0; i < threads; ++i) { // 构造并插入vector最后 workers.emplace_back( [this] { for (;;)//轮询 { std::function<void()> task; { //获取同步锁 std::unique_lock<std::mutex> lock(this->queue_mutex); //线程会一直阻塞,直到有新的task,或者是线程要退出 this->condition.wait(lock, [this] { return this->stop || !this->tasks.empty(); }); //线程退出 if (this->stop && this->tasks.empty()) return; //将task取出 task = std::move(this->tasks.front()); //队列中移除以及取出的task this->tasks.pop(); } //执行task,完了则进入下一次循环 task(); } } ); }}