关于C++线程池的实现的思考

2023-11-10

  今天突然对前些日子一直很疑惑的c++线程池有了新的想法。其实所谓的线程池无非就是两个技术点,一个,多线程,指工作线程和主线程分离,或者说数据接收和处理分两个线程,一般就是讲需要运行的函数放到子线程执行,这个在C++目前版本可以用std::thread来实现。另外一个是池,池子嘛,可以反复装东西,也就是子线程的服用问题,可以这样考虑,在线程池类中添加一个队列,用来存储需要执行的函数,然后顺序执行(私以为可能要考虑平均负荷来考虑需要开多少条子线程处理),主线程数据进来了,可以把新的处理函数加入这个处理队列。

  另外一个问题,就是线程同步问题。目前我能想到那么几种手法。
    1.navie法,添加互斥量,用一个公用锁,只要保证队列的同步就好了。

    2.高贵的C11给我们提供的方法,std::condition_variable,这个能达到的目的是one by one,小胖友排排坐的感觉,当然,其中还是用了一个mutex。

 

转载于:https://www.cnblogs.com/IGNB/p/11591836.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于C++线程池的实现的思考 的相关文章

  • 【C/C++】报错问题积累

    1 出现Deprecated declaration XXX give arg types c文件中 有没有参数的函数时 声明需要加void即 main c void fun main h void fun void
  • C++知识积累:内存对齐理解

    为什么要进行内存对齐 这是因为CPU的读取总是对齐的 举个例子 假设CPU是32位的 那么CPU每次读取的4字节数据的首地址都是4的倍数 也就是说 内存中数据首地址为4的倍数时 CPU一次操作就可以完成数据读取 假设有一个int型四字节大小
  • 五. python面向对象(多态 和metaclass=abc.ABCMeta)

    一 多态 多肽 一种事物的多种形态 叫多肽 例如 动物 animal 猫 狗 animal py 文件 动物类 都有名字这个属性 和吃这个方法 class Animal object def init self name self name
  • Qt5学习之路(vs2012下创建一个QT应用程序)2013-10-14

    刚开始学习QT在网上找的资料基本都是使用QT Create进行开发的 VS下开发的学习资料感觉很少很难找的到 视频教程也基本没看到过貌似 因为我们研发中心是使用MFC进行开发开发工具是VS2010 使用QT开发的话基本我们不会再使用QT C
  • 编写递归算法,计算二叉树叶子结点的数目。

    编写递归算法 计算二叉树叶子结点的数目 编写递归算法 计算二叉树叶子结点的数目 include stdio h 包含 getchar scanf printf include malloc h malloc 动态申请空间 函数 二叉树 结点
  • C语言pcre库的使用及验证IP地址的合法性

    PCRE是一个用C语言编写的正则表达式函数库 它十分易用 同时功能也很强大 性能超过了POSIX正则表达式库和一些经典的正则表达式库 在使用PCRE库时 首先肯定是需要安装pcre的 不过一般的系统都会有自带的PCRE库 不过如果想使用最新
  • c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建

    推荐视频课程 https www bilibili com video BV1et411b73Z p 2 已投币三连 b站果然是个学习的网站 本来是想在linux环境下运行QT 于是先学了几个月linux嵌入式驱动开发 后来发现太底层了 与
  • 经典面试题之new和malloc的区别

    new和malloc的区别是C C 一道经典的面试题 我也遇到过几次 回答的都不是很好 今天特意整理了一下 0 属性 new delete是C 关键字 需要编译器支持 malloc free是库函数 需要头文件支持 1 参数 使用new操作
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • floor(),ceil()函数

    地板 天花板函数 均包含在math h中 意思分别为 返回不大于形参的最小整数和不小于形参的最大整数 include
  • lua和测试(一)

    lua做为一门高级语言 在游戏产业运用到机会越来越多了 测试掌握几门脚本语言也有一定的重要性 以下对于lua组合输入做出一些引导 测试需要掌握的关于返回数值 主要用到布尔类 前言的指引 lua的语法比较简单和清晰 学过c语言的可以很好的掌握
  • 【C/C++】 - Linux下查找函数头文件 以及 man命令拓展

    背景 比如现在需要找C语言 sleep函数的头文件 使用man来查找 可以先man sleep 可以发现出来的默认是sleep 1 是一个User Commands 明显不是我们需要的 这里提示了 看sleep 3 那我们查看下sleep
  • stat 函数解析

    stat 函数的简单使用 stat 函数是用来获取文件的各种属性的一个linux下的常用API函数 函数原型为int stat const char path struct stat buf stat定义如下 struct stat dev
  • C 语言教程:数据类型和格式说明符

    C 语言中的数据类型 C 中的变量必须是指定的 数据类型 并且您必须在 printf 函数中使用 格式说明符 来显示它 创建变量 int myNum 5 整数 没有小数点 float myFloatNum 5 99 浮点数 char myL
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++中的引用

    一 引用的概念 引用不是新定义一个变量 而是给已有变量取一个别名 编译器不会为引用变量开辟内存空间 而和它引用的变量共用一块内存空间 注意 由于C 兼容C 所以 既可以是引用符号 也可以是取地址 int a 0 int b a cout l
  • C++实现函数重载的原理

    一 函数重载的概念 C 中允许存在同名函数 但要求函数参数的类型 个数不同 这些同名函数就称为函数的重载 void func int a int b cout lt lt func int a int b lt lt endl void f
  • 在 Solaris 上,使用 gcc 编译的库与使用 cc 生成的库的使用方式是否相同?

    我目前正在尝试编译 libxml2在 Solaris 上 当我运行源代码提供的 configure 脚本时 会自动使用 gcc 和 g 编译器 但是 我想使用 cc 和 CC 编译器 所以我跑 configure CC cc CXX CC
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我

随机推荐

  • Java常见面试题汇总-----------数据库(数据库索引及其实现)

    54 数据库索引 索引的优缺点 优点 1 大大加快数据的检索速度 2 创建唯一性索引 保证数据库表中每一行数据的唯一性 3 加速表和表之间的连接 4 在使用分组和排序子句进行数据检索时 可以显著减少查询中分组和排序的时间 缺点 1 索引需要
  • 应用程序如何调用驱动

    以write函数举例 详细调用流程 insmod驱动程序 申请设备名 设备号以及指定fops方法 这些可以在 proc devices中获得 从 proc devices中获得主设备号 并使用mknode命令来建立设备节点文件 这是通过主设
  • 软件测试第一次做项目之银行项目【操作细节总结】

    在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试 在这些测试的内容中如何去更好的掌握测试技能保证测试质量 一起来学习探讨交流 下面为银行测试点的概括 根据上图 我们可以从以下几个方面重点关注 1 管理端的测试主要是在管理后端对用户
  • osgEarth的Rex引擎原理分析(四十八)osgEarth::Drivers::RexTerrainEngine::DrawState的作用

    目标 四十五 中的110 每帧都会创建一个DrawState 创建在TerrainRenderData setup 这里存在内存泄漏的问题 因为只有new没有delete 不存在的 drawState是智能指针 超出范围时会自动销毁 也就是
  • Windows Update Blocker,windows系统关闭自动更新工具

    今天打开电脑发现系统又自动更新了 这一天天更新真的太烦了 然后我从网上找到一个工具 可以自由开启和关闭系统自动更新 这里分享一下网址 https www filehorse com download windows update block
  • ScriptableObject保存数据的几个坑

    public class GraphData ScriptableObject public string Title HideInInspector public string hide private int pri public Ty
  • 互联网摸鱼日报(2022-10-16)

    互联网摸鱼日报 2022 10 16 博客园新闻 百度商标维权获赔超千万 又一公司冒用 百度 一审被判赔60万 Meta首席产品设计主管 副总裁宣布将离职 Temu冲至美区苹果商店购物类前五 拼多多的低价策略在海外也奏效了 特斯拉 撞车 疑
  • flex 实现三栏等分布局

    ul li 左 li li 中 li li 右 li ul 将下列布局三等分如下图 方法一 父子元素宽度设为相等宽度 父元素 display flex 子元素 flex auto 即 flex 1 1 auto 解析 可以看到width的设
  • 电容传感器

    背景介绍 去年 博后师兄从新西兰购买了一款电容传感器 能够对大变形进行测量 可以用来人体动作捕捉 在智能穿戴 医疗复健等领域具有广阔的应用前景 本推文对相关内容进行介绍 具体如下图所示 电容传感器主要包含两部分内容 1 传感器部分 师兄对电
  • 重装ubuntu后Samba从windows不能登录

    Samba登录问题 ubuntu被搞挂了 重装了下 apt get samba后导入之前的smb conf竟然在windows里无法登录 折腾了几个小时后突然发现sb服务器竟然没有从linux里自动倒入密码 所以如下路径 新装ubuntu后
  • Virtio SCSI设备介绍

    emu的存储栈 在KVM虚拟化环境中 当客户机的内核存储系统像在物理机上一样通过页缓存 文件系统 通用块设备层运行到实际设备驱动时 这时驱动对设备寄存器的访问会触发CPU从客户机代码切换到物理机内的KVM内核模块 进而这个I O请求会被分发
  • C语言课程设计---学生信息管理系统

    include
  • 网页跳转新页面打开,保留当前站点

    原本这一句上没有 target blank 加上这个属性之后 就可以跳转新页面 不用离开当前站点了 备注 当然也可以在链接上右键打开新页面 由于我个人不太习惯 所以就尝试了一下 好像更麻烦 因为这样也只能改一个链接的跳转方式
  • vue项目中浏览器图标的设置

    在vue项目中 我们怎样设置浏览器图标 我们来看vue项目的目录结构 根目录下有一个index html 这个就相当于我们普通项目中的各个html页面文件 所以设置方法就是在index html的head标签中添加link标签 在这里要注意
  • 最近的一些知识点索引

    1 不要对含有虚函数的类进行memset操作 会把vptr写坏 2 stl中list set map遍历删除时 两种正确的方法 使用erase的返回值获得下一个值 或者在erase之前 3 boost库里头有multi index cont
  • java.lang.NullPointerException at org.springframework.data.redis.core.Abstr... springboot整合redis报错

    java lang NullPointerException at org springframework data redis core Abstr springboot整合redis以后向redis写入值突然报空指针异常 我的token
  • Gin实践 连载九 将Golang应用部署到Docker

    将Golang应用部署到Docker 项目地址 https github com EDDYCJY go 快上车 支持一波 原文地址 https segmentfault com a 11 注 开始前你需要安装好 docker 配好镜像源 本
  • odoo 12中pdf打印模板

    pdf打印模板 coding utf 8 from odoo import models fields api import decimal class PDFDemoTemplate models AbstractModel name r
  • 在R语言中,可以使用不同的包(例如ggplot2、base)来创建柱形图。

    在R语言中 可以使用不同的包 例如ggplot2 base 来创建柱形图 以下是两个常用包的示例代码 使用ggplot2包绘制柱形图 RCopy code 安装和加载ggplot2包 install packages ggplot2 lib
  • 关于C++线程池的实现的思考

    今天突然对前些日子一直很疑惑的c 线程池有了新的想法 其实所谓的线程池无非就是两个技术点 一个 多线程 指工作线程和主线程分离 或者说数据接收和处理分两个线程 一般就是讲需要运行的函数放到子线程执行 这个在C 目前版本可以用std thre