目录
1、为什么需要线程池
为了减少创建和销毁线程的次数,让每个线程可以多次使用,可根据系统情况调整执行的线程数量,防止消耗过多内存,所以 我们可以使用线程池.
2、线程池实现方法
线程池的内容主要包括三部分,第一个是工作队列,用来存放我们创建的多个线程,第二个是任务队列,用来存放递交的工作任务,第三个是同步变量,用来控制任务的同步,防止工作线程同时获取到同一个任务。
3、了解C++关于多线程的知识
实现线程池之前需要掌握的预备知识:
1、thread:用于创建工作线程
2、mutex:用于同步
3、condition_variable:用于条件阻塞
4、atomic:原子变量,用于控制线程状态
5、参数包:传递函数的多个参数
6、bind(不是socket中的bind):将参数包与参数进行绑定
7、forward:完美转发,保证传递参数与传入时的类型相同
8、future:存储任务返回值,让调用程序能够异步获取结果
4、源码展示
#pragma once
#include <future>
#include <mutex>
#include <thread>
#include <queue>
#include <functional>
#include <iostream>
#include <memory>
using namespace std;
class MyThreadPool
{
public:
My