当前位置: 首页 > news >正文

【c++】【线程池】固定式线程池(FixedThreadPool)

【c++】【线程池】固定式线程池(FixedThreadPool)

1属性

1.1 Task可调用对象

使用 function 包装器和using类型重命名 设置一个Task的可调用对象(可理解为函数指针) 这个Task也就是我们的任务

  • using Task = std::function<void(void)>;
  • 定义了一个类型别名 Task,它是 std::function<void(void)> 的别名。这样做的好处是,代码中以后可以直接使用 Task 来表示 std::function<void(void)> 类型的对象,而不需要每次都写出 std::function<void(void)>。 无返回值 无函数参数

1.2 同步队列的引入 m_queue

之前设计的同步队列的类

  • SyncQueue<Task> m_queue

1.3 线程组 -->使用智能指针管理

线程组是执行任务的线程的集合,使用唯一性智能指针管理

  • list<unique_ptr<thread>>m_threadgroup

1.4 线程组运行与否的判断–>m_running

  • atomic_bool m_running;

1.5 运行一次的标志–>m_flag

  • once_flag m_flag;

2方法(主要)

2.1 线程的入口函数–>RunInThread()

判断线程组是否运行(m_running) 循环从任务队列中获得任务 并执行这个任务 使用task();

2.2 线程的启动函数–>Start(int numthreads)

首先传入需要创建的线程个数 numthreads
判断线程组是否运行(m_running)
循环创建线程放入线程组 使用智能指针管理这个线程 并且调用线程的入口函数

  • m_threadgroup.push_back(make_unique<thread>(&FixedThreadPool::RunInThread, this));

2.3 线程停止函数–>StopThreadGroup()

1 停止同步队列(强行停止 或者等待停止
2 将 线程组运行与否置为否
3 遍历线程组 并判断当前线程是否存活 等待线程结束
4 释放线程资源

3方法(次要)

3.1向同步队列添加任务

调用m_queue里面的Put()添加函数 一个左值添加 一个右值添加

3.2 停止函数 stop()

判断线程停止函数–>StopThreadGroup() 只调用一次

3.3 构造函数

对m_queue 以及 numthreads进行初始化
并将m_running置为true 运行
内部调用Start() 现成的启动函数

3.4 析构函数

内部调用stop()

这里只是最基础的实现 还存在一些问题 比如上次提到的 以及无法获取函数执行返回值 以及一旦阻塞会一直等待 没有别的处理方案 后续会写一些完善措施

相关文章:

  • 解锁C# XML编程:从新手到实战高手的蜕变之路
  • Document对象
  • 【组态PLC】基于西门子S7-200和博图V16和组态王十层起重机电梯设计【含PLC组态源码 M018期】
  • 什么是 Java 中的线程安全?
  • 使用前端 html css 和js 开发一个AI智能平台官网模板-前端静态页面项目
  • 运维脚本——10.服务健康检查与自愈
  • ffmpeg avformat_open_input的作用
  • 赚钱的事与值钱的事
  • 绕过information_schema库的一些方式
  • 总结一下Java中的线程池的面试问题
  • ms-swift 3.x和2.x中参数不一致的暗坑
  • string类详解(下)
  • Spark内存并行计算框架
  • 设计模式教程:模板方法模式(Template Method Pattern)
  • 体验腾讯tencent-deepseek-R1模型
  • 计算机毕业设计SpringBoot+Vue.js中小企业设备管理系统(源码+文档+PPT+讲解)
  • Linux: 已占用接口
  • 自动驾驶FSD技术的核心算法与软件实现
  • 【NLP面试八股-NLP常见面试问题详细回答】
  • 深度学习相关名词功能总结
  • 公司做网络推广怎么做/seo的工具有哪些
  • 东莞日增感染人数超25万/宁波seo公司网站推广
  • 京东网站的建设与发展/seosem是指什么意思
  • 可以做猫头像的网站/全国推广优化网站
  • 网站单页别人是怎么做的/黑帽seo技巧
  • seo排名工具站长/不限次数观看视频的app