关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(四)

news2024/11/28 2:39:43

文章目录

  • 前提
  • 提交的任务有返回值怎么办
  • 总结

前提

上一节关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(三)我们分析了以何种方式向线程池提交任务提交的任务若有参数怎么办,这一节我们分析提交的任务若有返回值怎么办?

提交的任务有返回值怎么办

测试代码如下:
请添加图片描述
先不要去关注其它地方,只看在example1example2中都使用了submitForReturn这个函数,从字面意思也可以理解,这个函数是用来提交带有返回值的任务的。那接下来去分析下这个函数是如何实现的。
请添加图片描述
代码注释比较清楚了。整体来说就是:将带有返回值的任务包装成一个std::packaged_task对象,然后将这个对象提交给任务队列,使用std::future::get()获取返回值


再来看example2,从使用形式上来看,它做了一层包装,也就是将很多返回值收集到了一起。来分析下它的代码:
请添加图片描述

总结

向线程池中提交任务,若提交的任务若有返回值时的处理流程大概就是这样,这里再引出一个问题:**若提交的任务既有参数,又有返回值怎么处理?**上一节分析了任务有参数怎么办,这一节分析了任务有返回值怎么办,那么两个结合起来就可以解决这个问题。如下:

int fun(int x) {
   return x++;
} 
auto task = std::bind(fun, 5);
auto res1 = pond.submitForReturn(task);
stream.print("return = ", res1.get());

至此,关于Hipe中动态线程池的一些关键点都分析完毕,如下:

  1. 线程池如何初始化
  2. 线程池如何提交任务
  3. 子线程如何执行任务
  4. 线程池如何动态增加或减少线程
  5. 线程池关闭时会做什么
  6. 任务以何种方式提交,任务如果有参数怎么办,任务如果有返回值什么办,任务如果既有参数又有返回值怎么办?

Hipe的动态线程池的代码写的比较易读,而且其中使用到了很多模板的知识。总体来说,无论你是想学习线程池的知识,还是想学习C++编程的知识,这份代码都值得一看 ,慢慢体会吧。

感谢开源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bootloader相关内容的辨析

在PC机中,BIOS(Basic Input/Output System,基本输入输出系统)和UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是两种用于初始化系统硬件、加载操作系统启动程(如…

nestjs nest-cli.json中的assets不生效

官方文档 Documentation | NestJS - A progressive Node.js framework // nest-cli.json{"collection": "nestjs/schematics","sourceRoot": "src","compilerOptions": {"assets": ["microservices/mail/te…

【宠粉赠书】智能计算系统:从深度学习到大模型 第2版

为了回馈粉丝们的厚爱,今天小智给大家送上一套关于图神经网络的学习宝典——《智能计算系统:从深度学习到大模型 第2版》。下面我会详细给大家介绍这本书,文末留有领取方式。 “只要你想把大模型做得更好、做得更大、做得更快、做得更省电&am…

Docker部署常用开发组件(保姆级教程)

说明 本文总结了一些常用组件的Docker启动命令及过程,在开发过程中只需花费数分钟下载和配置即可完美使用这些服务。 Mysql MySQL 是一种开源关系数据库管理系统(RDBMS),目前由 Oracle 公司维护。MySQL 以其高性能、可靠性和易用…

Qt4代码实现下面的界面

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

AI预测体彩排3采取888=3策略+和值012路或胆码测试8月22日升级新模型预测第59弹

经过近60期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,已到达90%的命中率,这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了,大部…

【C++】map、set基本用法

欢迎来到我的Blog,点击关注哦💕 前言: C的STL已经学习很大一部分了,接下来介绍的是map set是c的是两种关联容器。 简单介绍 map set: 两者都使用红黑树作为底层数据结构来存储元素。map是一种键值对容器,其中每个键…

pip package查询网站(性质类似于npmjs.com)

网址:PyPI The Python Package Index python 的依赖包查询网站 就和 node 的 npmjs.com 一样

SD-WAN采用哪种网络技术?如何自建SD-WAN组网?

SD-WAN(Software-Defined Wide Area Network,软件定义广域网)是一种基于软件的网络架构,它利用软件定义网络(SDN)的技术来管理广域网(WAN)的连接和服务。SD-WAN的主要目的是提高网络…

四大LLM模型,预训练和后训练新范式详解

导读 最初,大语言模型LLM的训练过程只关注于预训练,但如今已经扩展到包含预训练和后训练两个阶段。后训练通常包括监督指令微调和对齐,这一方法在ChatGPT发布后广泛流行! 翻译自:https://magazine.sebastianraschka.com/p/new-l…

基于距离度量学习的异常检测:一种通过相关距离度量的异常检测方法

异常通常被定义为数据集中与大多数其他项目非常不同的项目。或者说任何与所有其他记录(或几乎所有其他记录)显著不同的记录,并且与其他记录的差异程度超出正常范围,都可以合理地被认为是异常。 例如上图显示的数据集中,我们有四个簇(A、B、C和D)和三个位于这些簇之外的点:P1、P…

领夹麦克风哪个牌子的好,2024年无线领夹麦克风十大品牌推荐

在追求高质量音频的时代,一款性能稳定、音质出色的无线领夹麦克风,不仅能够提升内容创作的品质,也是赠予播客爱好者、视频博主的佳礼。然而,市场上的无线领夹麦克风品种繁多,其中不乏一些厂商为追求低成本,…

微软Phi-3.5系列亮相:性能超越Gemini 1.5和GPT-4o

前沿科技速递🚀 在人工智能领域,微软从未停止过创新的步伐。尽管与OpenAI的合作为微软带来了显著的成功,但他们显然不满足于此。近日,微软再次在AI领域引发关注,正式发布了三款全新的Phi-3.5系列AI模型。这些模型不仅在…

构建基于LLM的应用程序——使用LLM的搜索和推荐引擎

在上一章中,我们介绍了构建对话应用程序的核心步骤。我们从一个基础的聊天机器人开始,然后逐步添加了更复杂的组件,例如记忆、非参数化知识和外部工具。借助LangChain的预构建组件以及Streamlit的UI渲染,这一切都变得相对简单。尽…

C++ TinyWebServer项目总结(6. 高级 I/O 函数)

文件描述符 文件描述符(File Descriptor, FD)是操作系统中用于访问文件的一个抽象概念。它是一个非负整数,通常由操作系统分配,用来标识被打开的文件或输入输出资源(如管道、网络连接等)。文件描述符在操作…

苍穹外卖之员工管理、分类管理

新增员工 新增员工 需求分析和设计 产品原型: 接口设计: 数据库设计: 代码开发 根据新增员工接口设计对应的DTO: 这是实体类属性,但是由于属性差异过大,使用DTO封装数据为: 当前端提交的数据…

java常见面试题汇总

🌏个人博客主页:意疏-CSDN博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 关注 收藏支持一下笔者吧~ 阅读指南: 开篇说明一、封装 继承 多态1.封装2.继承3.多态 二、什么是重载…

非极大值抑制(Non-Maximum Suppression,简称 NMS)

本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“【python三维深度学习】python三维点云从基础到深度学习_python3d点云从基础到深度学习-CSDN博客”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。 非极大值抑制&#xff08…

揭开数字化转型的神秘面纱

​在当今快速发展的时代,数字化转型已成为众多企业和组织追求的目标。然而,对于许多人来说,数字化转型仍然笼罩着一层神秘的面纱。本研究报告旨在揭开数字化转型的神秘面纱,深入探讨其内涵、重要性以及实施策略。 一、数字化转型的…

开始尝试从0写一个项目--后端(四)

借出,归还,管理 学生和管理员登录分离 学生登录到用户界面 管理员到后台 后台和用户分离 添加代码 sems-server/src/main/java/com/ljc/controller/user/UserStudentController.java package com.ljc.controller.user;import com.ljc.constant.Jwt…