目录
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:
MyThreadPool(int thread_size = 4):_stop(false), _free_size(thread_size){
for (int i = 0; i < thread_size;i++) {
_wokers.emplace_back([this]{
{
lock_guard<m

本文介绍了为何需要线程池以减少线程创建销毁的开销,并详细讲解了线程池的实现方法,包括工作队列、任务队列和同步变量。内容涉及C++中的多线程知识,如thread、mutex、condition_variable等。还讨论了在C++中如何处理成员函数作为回调函数的编译错误,并给出了在Linux环境下编译运行的注意事项。
最低0.47元/天 解锁文章
625

被折叠的 条评论
为什么被折叠?



