C++并发编程实战学习笔记
一、C++的并发:
多进程并发:
将应用程序分为多个独立的进程,它们在同一时刻运行,就像同 时进行网页浏览和文字处理一样。独立的进程可以通过进程间常规的通信渠道传递讯息(信号、套接字、文件、管道等等)。不过,这种进程之间的通信通常不是设置复杂, 就是速度慢,这是因为操作系统会在进程间提供了一定的保护措施,以避免一个进程去修改 另一个进程的数据。还一个缺点是,运行多个进程所需的固定开销:需要时间启动进程,操 作系统需要内部资源来管理进程,等等。
当然,以上的机制也不是一无是处:操作系统在进程间提供的附加保护操作和更高级别的通 信机制,意味着可以更容易编写安全(safe)的并发代码。实际上,在类似于Erlang编程环境 中,将进程作为并发的基本构造块。
使用独立的进程,实现并发还有一个额外的优势———可以使用远程连接(可能需要联网)的方 式,在不同的机器上运行独立的进程。虽然,这增加了通信成本,但在设计精良的系统上, 这可能是一个提高并行可用行和性能的低成本方式。
多线程并发:
并发的另一个途径,在单个进程中运行多个线程。线程很像轻量级的进程:每个线程相互独 立运行,且线程可以在不同的指令序列中运行。但是,进程中的所有线程都共享地址空间, 并且所有线程访问到大部分数据———全局变量仍然是全局的,指针、对象的引用或数据可 以在线程之间传递。虽然,进程之间通常共享内存,但这种共享通常也是难以建立,且难以 管理。因为,同一数据的内存地址在不同的进程中是不相同。
地址空间共享,以及缺少线程间数据的保护,使得操作系统的记录工作量减小,所以使用多 线程相关的开销远远小于使用多个进程。不过,共享内存的灵活性是有代价的:如果数据要 被多个线程访问,那么程序员必须确保每个线程所访问到的数据是一致的。
二、线程管理:
线程管理的基础:
每个程序至少有一个线程:执行main()函数的线程,其余线程有其各自的入口函数。线程与原 始线程(以main()为入口函数的线程)同时运行。如同main()函数执行完会退出一样,当线程执行完入口函数后,线程也会退出。在为一个线程创建了一个 std::thread 对象后,需要等待这个线程结束;不过,线程需要先进行启动。
- 线程启动:线程在 std::thread 对象创建(为线程指定任务)时启动,这种函数在其所属线程上运行,直到函数执行完毕,线程也就结束了。在一些极端情况下,线程运行时,任务中的函数对象需要通过某种通讯机制进行参数的传递,或者执行一系列独立操作;可以通过通讯机制传递信号,让线程停止。线程要做什么,以及什么时候启动,其实都无关紧要。
三、线程间共享数据:
四、同步并发操作:
五、C++内模型和原子类型操作:
六、基于锁的并发数据结构设计:
七、无锁并发数据结构设计:
八、并发代码设计:
九、高级线程管理:
十、多线程程序测试和调试:
相关文章:
C++并发编程实战学习笔记
一、C的并发: 多进程并发: 将应用程序分为多个独立的进程,它们在同一时刻运行,就像同 时进行网页浏览和文字处理一样。独立的进程可以通过进程间常规的通信渠道传递讯息(信号、套接字、文件、管道等等)。不过,这种进程…...
【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】
持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】 本地事务事务的基本性质事务的隔离级别(下面四个越往下,隔离级 别越高,并发能力越差)事务的传播行为(是否…...
HC05主从一体蓝牙模块的裸机使用——单片机<-->蓝牙模块
HC-05是一种常用的蓝牙模块,具有低功耗、低成本、易于使用的特点。它可以实现与其他蓝牙设备(如手机、电脑等)进行无线通信。HC-05蓝牙模块具有串口通信接口,可以通过串口与主控制器(如Arduino、Raspberry Pi等&#x…...
“点点通“餐饮点餐小程序-计算机毕业设计源码11264
"点点通"餐饮点餐小程序 XXX专业XX级XX班:XXX 指导教师:XXX 摘要 随着中国经济的飞速增长,消费者的智能化水平不断提高,许多智能手机和相关的软件正在得到更多的关注和支持。其中,微信的餐饮点餐小程序更…...
C#知识|账号管理系统-账号信息管理界面[1]:账号分类选择框、Panel面板设置
哈喽,你好啊,我是雷工! 前一节实现了多条件查询后端代码的编写, 接下来继续学习账号信息管理界面的功能编写,本节主要记录账号分类选择框和Panel的设置, 以下为学习笔记。 01 功能说明 本节实现以下功能: ①:账号分类选择框只能选择,无法自由输入; ②:账号分类框默认…...
Meta即将推出4000亿的Llama 3 超级AI模型,或将改写大语言模型竞争格局!|TodayAI
2024年4月,科技巨头Meta发布了其最新的AI大型语言模型——Llama 3,该模型基于一个至少比前代产品Llama 2大七倍的数据集,展现出前所未有的性能。在最初发布时,Llama 3提供了8B和70B两种参数规模的版本,并迅速超越了Goo…...
数据挖掘新技能:Python爬虫编程指南
Python爬虫的优势 Python之所以成为数据爬取的首选语言,主要得益于其丰富的库和框架支持。以下是一些常用的库: Requests:用于发送HTTP请求,简单易用,是Python爬虫的基础库。BeautifulSoup:用于解析HTML文…...
object-C 解答算法:移动零(leetCode-283)
移动零(leetCode-283) 题目如下图:(也可以到leetCode上看完整题目,题号283) 解题思路: 本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少? 这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置; 当所有“非0元素值”都移…...
靖江美食元宇宙
关于“靖江美食元宇宙”的具体信息,搜索结果中并未提供直接相关的详细描述。不过,搜索结果显示了有关元宇宙在食品领域的应用和探索,例如食品元宇宙的概念、不同品牌尝试进入元宇宙市场的例子等。这些信息表明,元宇宙技术正在被用…...
模板方法设计模式
模板方法设计模式: 模板方法设计模式:解决方法中存在重复代码的问题。 模板方法设计模式的写法: 1、定义一个抽象类 2、在里面定义2个方法 一个是模板方法:把相同代码放里面去 一个是抽象方法:具体实现交给子类完成 建议使用…...
对象存储解决方案:高性能分布式对象存储系统MinIO
文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 建议使用RPM或DEB安装方式2.2 创建环境变量文件2.3 启动MinIO服务2.4 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3…...
2024 年需要考虑的 16 个知识库趋势和统计数据
自2017年以来,千禧一代已成为全球人口最多的一代。如果您的企业还没有准备好应对这一变化带来的挑战,那么是时候加快这一进程了。 毫不奇怪,千禧一代痴迷于智能手机和技术。他们具有流动性,期望与他们互动的品牌能够即时高效。 …...
微信小程序-实现跳转链接并拼接参数(URL拼接路径参数)
第一种常用拼接方法:普通传值的拼接 //普通传值的拼接checkRouteBinttap: function (e) {wx.navigateTo({url: ../checkRoute/checkRoute?classId this.data.classInfo.classId "&taskId" this.data.classInfo.taskId,})}第二种:拼接…...
【代码随想录|第十一章 图论part01 | 797.所有可能的路径 】
代码随想录|第十一章 图论part01 | 图论理论基础,797.所有可能的路径,广搜理论基础 一、图论理论基础1.图的基本概念2.图的构造1)邻接矩阵2)邻接表 3.图的遍历方式4.深度优先搜索理论基础 二、797.所有可能的路径1.核心代码2.问题…...
尚硅谷大数据技术-数据湖Hudi视频教程-笔记03【Hudi集成Spark】
大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…...
【python】Pandas中IndexError: single positional indexer is out of bounds的报错分析
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
ubuntu上通过修改grub启动参数,将串口重定向到sol
要修改 GRUB 启动参数以实现串口重定向到 Serial Over LAN (SOL),你需要编辑 /etc/default/grub 文件,并更新 GRUB 配置。这里是详细步骤: 1. 编辑 /etc/default/grub 打开终端并使用文本编辑器(如 nano 或 vim)编辑…...
【Git】(基础篇四)—— GitHub使用
GitHub使用 经过上一篇的文章,相信大家已经对git的基本操作熟悉了,但哪些使用git的方法只是在本地仓库进行,本文介绍如何使用git和远程仓库进行连接使用。 Github和Gitee 主要用到的两个远程仓库在线平台是github和gitee GitHub GitHub …...
【Qt+opencv】基础的图像绘制
文章目录 前言line函数ellipse函数rectangle函数circle函数fillPoly函数putText函数总结 前言 在计算机视觉和图像处理领域,OpenCV是一个强大的库,提供了丰富的功能和算法。而Qt是一个跨平台的C图形用户界面应用程序开发框架,它为开发者提供…...
使用Nginx OpenResty与Redis实现高效IP黑白名单管理
1、引言 在当今数字化时代,网络安全已成为企业和个人用户关注的焦点。IP黑白名单作为一种有效的网络安全策略,允许我们精确控制对Web资源的访问权限。通过白名单,我们可以确保只有可信的IP地址能够访问敏感资源;而黑名单则可以阻…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
