C++多线程并发总结

2023-10-29

1. 线程创建与管理

1.1 并发与并行

  • 并发:同一时间段内可以交替处理多个操作,强调同一时段内交替发生。
  • 并行:同一时刻内同时处理多个操作,强调同一时刻点同时发生。

1.2 多线程并发与多进程并发

  • 进程:资源分配的基本单位,也是程序运行的单位。用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。
  • 线程:执行处理器调度的基本单位。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。

多进程并发编程与多线程并发编程的区别主要在有没有共享数据,多进程间的通信较复杂且代价较大,主要的进程间通信渠道有管道、信号、文件、套接字等。由于C++没有提供进程间通信的原生支持,后续主要介绍多线程并发编程,和多线程间的同步与通信。

为了解决平台相关多线程API使用上的问题,逐渐开发出了Boost、ACE等平台无关的多线程支持类库。直到C++11标准的发布,借鉴了很多Boost类库的经验,将多线程支持纳入C++标准库。C++11标准不仅提供了一个全新的线程感知内存模型,也包含了用于管理线程、保护共享数据、线程间同步操作以及低级原子操作的各个类。

2. C++线程创建

C++11新标准多线程支持库

  1. < thread > : 提供线程创建及管理的函数或类接口;
  2. < mutex > : 为线程提供获得独占式资源访问能力的互斥算法,保证多个线程对共享资源的同步访问;
  3. < condition_variable > : 允许一定量的线程等待(可以定时ÿ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++多线程并发总结 的相关文章

  • 有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的 药物,最少需要多少只小白鼠?

    天堂之鼠 文章目录 天堂之鼠 原题题目 某个面试题 有 1000 个一模一样的瓶子 其中有 999 瓶是普通的水 有一瓶是毒药 任何喝下毒药的生物都会在一星期之后死亡 现在 你只有 10 只小白鼠和一星期的时间 如何检验出哪个瓶子里有毒药
  • linux中;、&和&&、

    Linux 特殊字符用法 特殊字符 注意 shell 在执行某个命令的时候 会返回一个返回值 该返回值保存到 shell 变量 如果 0时 表示命令执行成功 如果 1时 有时可以认为非0的数 返回值在0 255 之间 表示命令执行失败 分号
  • 以太坊学习:第一天

    目录 区块链目前可以分为四类 公链 私链 联盟链以及侧链 公链 私链 权利掌握在少数人手里 联盟链 部分去中心化 侧链 拓展协议 参考资料 以太坊的组成部分 以太坊中的重要概念 以太坊的货币 以太坊的挖矿产出 以太坊区块收入 区块链相关网站
  • JavaScript——中断请求的几种方案

    1 Promise Promise有一个缺点是一旦创建无法取消 所以本质上Promise是无法被终止的 但是我们可以通过中断调用链或中断Promise来模拟请求的中断 中断调用链 中断调用链就是在某一个then catch执行之后 后续的链
  • 期货开户交易绝对相信自己

    但当有些人不再害怕时 他们倾向于轻率 冲动鲁莽 轻率的结果就是他们又开始害怕了 如果你害怕犯错 你的恐惧会让你对市场的理解产生错误 导致你犯错 你无法学到足够的知识以弥补恐惧造成的消极影响 你就不会客观 不会毫不犹豫地行动 换句话说 在持续
  • 乘积尾零 蓝桥杯

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 如下的 10 行数据 每行有 10 个整数 请你求出它们的乘积的末尾有多少个零 5650 4542 3554 473 946 4114 3871 9073 9
  • Rhythmbox中文乱码解决办法

    转自 http hi baidu com morgensonne item 3470aef58747abde6325d2d9 今天在网络上找到了一个比较好的解决Rhythmbox中文乱码的问题的方法 进入你的音乐文件夹执行如下代码 mid3
  • vue3项目(七)----Login

    1 登录 整体认识和路由配置 2 登录 表单校验实现 ElementPlus表单组件内置了表单校验功能 只需要按照组件要求配置必要参数即可 思想 当功能很复杂时 通过多个组件各自负责某个小功能 再组合成一个大功能是组件设计中的常用方法 表单
  • 使用vue-cli创建一个vue3项目

    1 安装脚手架vue cli 如果之前已经安装过vue cli 先查看版本 保证vue cli版本在4 5 0以上 vue V 如果版本低于4 5 0 执行以下命令升级 npm install g vue cli 安装过程中有可能会出现报错
  • 大疆TT无人机编程初体验,教你对拥抱开源的无人机为所欲为!

    先放个项目演示视频镇帖 可能是大疆TT无人机的第一款DIY遥控器 大疆TT无人机编程试飞初体验 认识我的朋友 大概都知道 我是一个 运气爆棚 的人 经常能 捡 到一些好玩的东西 这不 前两天在家门口 捡 到一架大疆 RoboMaster T
  • 有15个人围成一圈,顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人 C#版

    今天下午 某一同学 问我一面试题 第一做法就是度娘了半天 发现都是c c 的 遂参考逻辑 整理完一C 版本的 留个小纪念 绝对正宗C namespace ConsoleApplication1 class Program static vo
  • .Net C# 免费PDF合成软件

    最近用到pdf合成 发现各种软件均收费啊 这个技术非常简单 别人写好的库一大把 这里用到了PDFsharp 项目地址Home of PDFsharp and MigraDoc Foundation 软件下载地址 https download
  • 常用的 SQL Server 关键字及其含义

    SQL Server 是一种关系型数据库管理系统 RDBMS 提供了用于管理和操作数据库的各种关键字 以下是一些常用的 SQL Server 关键字及其含义 1 SELECT 用于从数据库中检索数据 2 INSERT 用于将新记录插入到数据
  • MATLAB 排列组合问题

    毕设ing 最近每天除了看论文就是matlab仿真 MATLAB编程强调 vectorization 对矩阵进行操作 毕竟人家名字就叫Mat Lab 矩阵的实验室 对于排列组合问题 按照C语言的思路肯定就用for循环 但是在matlab里
  • MAC-下载安装robotframework

    1 首先 先看自己的电脑有没有自带python which python gt usr bin python 2 查看当前python 版本 python version gt Python 2 7 10 default Oct 23 20
  • 以太坊源码(03):POA委员会选举机制

    目录 1 名词介绍 2 矿工投票方法 3 委员会确定投票流程 3 1 关键概念描述 3 1 1 Epoch checkpointInterval 3 1 2 Snapshot 3 2 投票方法 1 名词介绍 节点 普通的以太坊节点 没有区块
  • 1000 BASE-T1 PMA一致性测试解析

    车载以太网是为了满足汽车行业对高可靠性 低电磁辐射 低功耗 带宽分配 低延迟以及同步实时性等方面的要求而产生的 目前车载电子控制单元中 最常用的是1000BASE T1技术 其遵循的是IEEE 802 3bp标准规范要求 1000BASE
  • Nginx代理(Linux&Windows)-服务器

    Linux linux一般都是用宝塔面板 一键安装使用 下面是安装完后添加配置就可以指定文件目录了 注意好空格 宝塔阿里云开启端口 宝塔阿里云开启端口 宝塔阿里云开启端口 就okk了 Windows 直接下一个Nginx https pan

随机推荐

  • Angular 和 Flask 全栈简易演示

    对于 JavaScript 框架 MEAN 堆栈以其方式非常有名 我经常遇到项目要求 人们希望使用 Python 构建服务器代码 主要是因为它与物联网 图像处理 数学应用程序或语言选择有关 Django 是 Python 爱好者构建服务器端
  • qt在没有环境下如何运行exe 打包流程-亲测简介可用

    配图 文字流程叙述 0 最好使用release 生成的exe 进行打包 不然最后的文件会特别大几个G 用relese生成的exe打包几十MB 1 用release生成的exe单独复制一份 放入一个自定义的文件夹 2 打开qt编译器命令框 注
  • 计算机网络打不开怎么办,电脑网页打不开怎么回事

    电脑网页打不开怎么回事 电脑网页打不开怎么回事 电脑没有断开网络 却打不开网页 这是怎么回事呢 通常由于电脑的DNS解析出现问题 所以才会导致网页打不开 下面教大家电脑网页打不开怎么回事的解决办法 一 清除DNS解析缓存 关于电脑网页打不开
  • 详细分析vcoco2014HOI数据集

    vcoco images 图片 train2014 共82783张 COCO train2014 000000581921 jpg COCO train2014 000000581922 jpg COCO train2014 0000005
  • 记录ubuntu启动卡在logo界面有鼠标进不了桌面的经历,以及安装ubuntu踩的坑

    出现问题前 我之前安装过很多次ubuntu 不管是虚拟机 4 5次 还是双系统 3 4次 每次都是我自己搞崩的 就是我和之前一样开始安装搜狗输入法 之前没出过问题 然后就是这次安装完 我感觉和之前不一样 就是之前不知道为什么安装完会有pin
  • 波兰表达式 - 前,中,后缀表达式计算转换

    先看一个算术题 3 4 5 6 29 前缀表达式 3456 中缀表达式 3 4 5 6 你会算的 后缀表达式 34 5 6 利用栈的特性来运算表达式 当前我只拿到了 3 4 5 6 让我求它的前缀和后缀 求后缀口诀 1 从左到右看 数字忙显
  • ubuntu 提示 Could not get lock /var/lib/dpkg/lock-frontend.的处理办法

    今天可能操作删除某个程序的时候提示无法删除 给锁定了 一直显示 Waiting for cache lock Could not get lock var lib dpkg lock frontend It is held by proce
  • Optimizer trance—mysql进阶(五十三)

    前面介绍了 如果加个format JOSN会把数据以json的格式返回 如果想看查询的额外信息 还可以在explain之后加个show warning查看 其中如果code为1003 则代表message里的内容是mysql优化器优化之后的
  • Python学习十二:Flask框架

    文章目录 一 Flask 简介 1 1 安装虚拟环境 1 1 1 安装Virtualenv 1 1 2 创建虚拟环境 1 1 3 激活虚拟环境 1 2 安装Flask 1 3 第一个Flask 二 Flask基础 2 1 开启调试模式 2
  • Java测试(1)

    1 什么是软件测试 软件测试就是软件测试人员验证软件是否满足用户的需求 测试的时候要测试满足和不满足的数据 2 软件测试和软件开发的区别 1 本身 开发 广度小 专业度高 测试 所需技能比价广泛 但是专业度低 2 软件测试和软件调式 目的
  • 阿里版GPT来袭——“通义千问”

    4月7日 阿里云在官方公众号中宣布 大模型 通义千问 开始邀请测试 你好 我叫通义千问 在 通义千问 的自我介绍中可知 它是达摩院自主研发的预训练语言模型 能够回答问题 创作文字 还能表达观点 撰写代码 基于上述能力 通义千问 认为其可以在
  • 数据仓库的选择

    author skate time 2010 03 11 数据仓库的选择 数据仓库的选择单从技术方面要从服务器硬件 数据库软件 ETL和前端展示软件 存储系统 仓库的架构设计几方面综合考虑 根据数据库的操作类型不同 数据库一般分为OLAP和
  • ORA-12505, TNS:listener does not currently know of SID given in connect descriptor解决方式

    启动项目连接oracle数据报 ORA 12505 TNS listener does not currently know of SID given in connect descriptor ORA 12505 TNS 监听程序当前无法
  • .NET网站部署到阿里云服务器经验分享

    由于笔者需要将自己的网站上线 所以第一步就是去买了一个阿里云服务器 想要远程访问的话 首先是云数据库的部署 然后是网站的部署 1 云数据库的部署 过程 在云服务器上下载SQLServer 然后把本地的数据库 架构和数据 使用脚本导出保存 再
  • 【千律】OpenCV基础:Hough圆检测

    环境 Python3 8 和 OpenCV 内容 Hough圆检测 将直角坐标系中的一个圆映射为新坐标系中的一个点 对于原直角坐标系中的每一个圆 可以对应 a b r 这样一个点 这个点即为新三维中的点 标准法实现步骤 1 获取原图像的边缘
  • 如果判断服务器是否在被CC攻击?

    什么是CC攻击 CC攻击的前身名为Fatboy攻击 是利用不断对网站发送连接请求致使形成拒绝服务的目的 攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包 造成对方服务器资源耗尽 一直到宕机崩溃 怎么判断是否被CC攻击 CC攻击主要
  • php怎么获取微信code,PHP tp3.2微信公众号静默授权获取code 获取openid

    PHP tp3 2微信公众号静默授权获取code 获取openid 发布时间 2018 02 24 14 46 浏览次数 1530 标签 PHP tp code openid 一 调用静默授权接口 基于thinkphp3 2的 1 获取co
  • [C语言]字符串处理 - 以指定的字符串分割字符串(支持中文字符)

    C语言 字符串处理 以指定的字符串分割字符串 支持中文字符 函数StringSplit 分割字符串到一个字符串数组中 其中该数组第0位为分割后字符串的个数 函数StringSplit Struct 以定义一个新结构的方式来实现该函数 C代码
  • 单片机----

    开启内部上拉电阻 pbph 0 1
  • C++多线程并发总结

    文章目录 1 线程创建与管理 1 1 并发与并行 1 2 多线程并发与多进程并发 2 C 线程创建 2 1 std thread 线程同步之互斥锁 std mutex std unique lock lock与unlock保护共享资源 lo