C++ Concurrency in Action 2nd Edition

《C++ Concurrency in Action - SECOND EDITION》的中文翻译-面圈网 (mianshigee.com)

C/C++ 学习教程源码-C/C++源码推荐-面试哥 (mianshigee.com)

作者正是为C++11标准引入线程库的C++标准委员会成员本人!并且本书作者还编写了众多构成C++标准的多线程和并发相关的提案、制定了并发技术规约(Concurrency Technical Specification),以及关于C++未来演化发展的提案。

《C++并发编程实战 第2版》是作者多年心血的凝聚。这本书基于他研习C++和多线程的全部经验,旨在指导其他C++开发者安全且高效地使用C++线程库和并发技术规约。可以说跟着这本书学习C++并发编程,就是在跟着标准学习了,这本书的权威性毋庸置疑

细心的同学肯定发现了,人邮君这次推荐的是最新出版的第2版。这是因为《C++并发编程实战》的第1版是以C++11为基础的,但后来C++委员会又相继发布了C++14标准、C++17标准和一些技术规约,进一步为编写多线程程序提供支持,比如C++17可以使用多线程或多处理器,使得图像处理、机器学习等性能敏感型任务更加快速的完成。而《C++并发编程实战 第2版》这本书就覆盖了现代C++的新特性,特别为工业级C++并发解锁了相应的特性、模式和最佳实践方式

● 从C++标准程序库的各种工具讲起,介绍了线程管控、在线程间共享数据、并发操作的同步、C++内存模型和原子操作等内容。

● 内容丰富全面,介绍了基于锁的并发数据结构、无锁数据结构、并发代码,以及高级线程管理、并行算法函数、多线程应用的测试和除错。

● 根据C++14和C++17标准进行更新和修订,涵盖了所有标准中最新的改动。第2版为读者展示了如何用C++17写出优雅且健壮的多线程应用,并告诉你所有的细节。

● 通过附录及线上资源提供了丰富的补充资料,以帮助读者更完整、细致地掌握C++并发编程的知识脉络。

不仅知识结构完整,本书还特别呼应“In Action”(实战)的主题,在每一章中都提供了示例和练习,以及本书作者——C++标准委员会成员、并发编程大师安东尼·威廉姆斯的一些独到见解,这对于开发人员来说是非常有价值的。

本书中所举的例子简洁而有代表性,比如:

● 基于锁的并发数据结构的设计(Designing lock-based concurrent data structure)

● 无锁并发数据结构的设计(Designing lock-free concurrent data structure)

● 并发代码的设计(Designing concurrent code)

● 高级线程管理(Advanced thread management)

● 并行算法(Parallel algorithm)

● 多线程应用的测试与调试(Testing and debugging multithreaded application)

这些例子中的一些代码甚至可以直接照搬到生产环境下使用,相信仔细阅读并实战完之后的你,能收获作者对多线程程序设计的一些很有价值的经验,能对于底层有更深入的认知。

本书译者与作者进行了大量邮件沟通,反复推敲,确保全书的翻译准确到位、简洁易懂。此外,译者还基于自己的开发经验,补充了许多延伸知识点,更为读者们提供了近200页的电子版附录D以及140多份配套代码文件。直接为读者打消了翻译版图书水土不服的顾虑!(真的吗?人邮哎,嘿嘿!)

C++ 那些事

GitHub - Light-City/CPlusPlusThings: C++那些事

感谢各位对《C++ 那些事》的支持,现将内容也同步至B站,以视频的方式展示,可以打开网站直接阅读~欢迎大家 star、转发、PR。

网站:C++那些事

  • 中文名:C++ 那些事
  • 英文名:Stories About C Plus Plus

这是一个适合初学者从入门到进阶的仓库,解决了面试者与学习者想要深入 C++ 及如何入坑 C++ 的问题。除此之外,本仓库拓展了更加深入的源码分析,多线程并发等的知识,是一个比较全面的 C++ 学习从入门到进阶提升的仓库。

Cmake 官方教程(翻译)-面圈网 (mianshigee.com)

一个现代c++语言和库功能的速查表-面圈网 (mianshigee.com)

GitHub - AnthonyCalandra/modern-cpp-features: A cheatsheet of modern C++ language and library features.

编程之法:面试和算法心得-面圈网 (mianshigee.com)

GitHub - julycoding/The-Art-Of-Programming-By-July-2nd: 本项目曾冲到全球第一,干货集锦见本页面最底部,另完整精致的纸质版《编程之法:面试和算法心得》已在京东/当当上销售

GitHub - chunhuajiang/arm-gcc-inline-assembler: ARM GCC 内联汇编参考手册 - 中文版

C++20 jthread:

std::jthread 在 std::thread 基础上,增加了能够主动取消或停止线程执行的新特性。与 std::thread 相比,std::jthread 具有异常安全的线程终止流程,并且在大多数情况下可以替换它,只需很少或无需更改代码。

A std::thread instance can be in either the joinable or unjoinable state. A std::thread that is default constructed, detached, or moved is unjoinable. We must join a joinable std::thread explicitly before the end of its life; otherwise, the std::thread's destructor calls std::terminate, whose default behavior is to abort the process. std::thread 实例可以处于可联接或不可联接状态。默认构造、分离或移动的 std::thread 不可联接。我们必须在可连接的 std::thread 生命周期结束之前显式加入它;否则,std::thread 的析构函数将调用 std::terminate,其默认行为是中止进程。

void FuncWithoutJoinOrDetach() {

  std::thread t{task, task_args};

  // 没有调用 t.join() 或 t.detach()

}  // t 的生命周期结束时将调用 std::terminate(),异常结束程序

c++11 中 thread 对象如果在销毁之前处于可 join 的状态,却没有 join 的话,将会引发一个异常。 

以上述代码所示,如果没有调用 t.join() 或 t.detach(),当线程对象 t 生命周期结束的时候,可能会产生 core dump导致程序异常终止。 上述例子中,在实例化对象 t 后,即使调用线程 t 的 join()函数,有时候可能需要等待很长时间才能将线程 t 的 task 执行完成,甚至是永久的等待(例如 task 中存在死循环),由于 thread 不像进程一样允许我们主动将其 kill 掉,所以当 t 中出现死循环,会导致无法继续执行 jion() 之后的语句,已经启动的线程只能自己结束运行或结束整个程序来结束该线程。 基于以上两个主要原因,在 C++20 中引入 std::jthread 类,来弥补 std::tread 的缺陷,其除了拥有 std::thread 的行为外主要新增了以下两个功能:

  • std::jthread 对象被析构时,会自动调用 join,等待其所表示的执行流结束。
  • std::jthread 支持外部请求中止(通过 get_stop_source、get_stop_token 和 request_stop )。

std::jthread 中的自动 join 和外部请求中止功能使编写更安全的代码变得更加容易,但其性能上相对于 thread 也增加了开销。

对于线程中断,std::jthread主要引入以下三个停止信号处理:

  • get_stop_source() :返回与线程的停止状态关联的 stop_source 对象。
  • get_stop_token() :  返回与线程的共享停止状态关联的 stop_token。
  • request_stop() :     请求执行经由线程的共享停止状态停止。

总结:

jthread 即是通过 RAII 机制封装的 thread,其会在析构时自动调用 join 防止线程 crash。

同时其也是可中断的,可以搭配这些中断线程执行的相关类使用:

  • stop_token:查询线程是否中断。
  • stop_source:请求线程停止运行。
  • stop_callbackstop_token 执行时,可以触发的回调函数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache Flink 1.12.0 on Yarn(3.1.1) 所遇到的問題

Apache Flink 1.12.0 on Yarn(3.1.1) 所遇到的問題 新搭建的FLINK集群出现的问题汇总 1.新搭建的Flink集群和Hadoop集群无法正常启动Flink任务 查看这个提交任务的日志无法发现有用的错误信息。 进一步查看yarn日志: 发现只有JobManager的错误日志出现了如下的…

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法 代码思路: 要用栈解决先序遍历,我们首先要知道栈的性质和二叉树先序遍历的规则 栈最基本的就是先进后出 而二叉树先序遍历就是“根左右” 利用这两个性质,我们可以先将根结点入队…

【数智化案例展】领克汽车——火山引擎助力领克汽车数字化营销实践

‍ 火山引擎案例 本项目案例由火山引擎投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 领克汽车是由吉利汽车、沃尔沃汽车和吉利控股集团合资成立的全球新高端品牌。据吉…

SpringBoot + Vue2项目打包部署到服务器后,使用Nginx配置SSL证书,配置访问HTTP协议转HTTPS协议

配置nginx.conf文件,这个文件一般在/etc/nginx/...中,由于每个人的体质不一样,也有可能在别的路径里,自己找找... # 配置工作进程的最大连接数 events {worker_connections 1024; }# 配置HTTP服务 http {# 导入mime.types配置文件…

3D人像手办定制业务再掀热潮,这一次有怎样的革新?(方法篇)

最近,3D真人手办热潮再起,最出圈的一次当属亚运会的3D打印元宇宙体验舱里面各国运动员带火的真人手办定制项目。作为3D技术推广者,博雅仔也在后台接受了很多朋友的询问—— ◆ 技术已经成熟了吗? ◆ 个人定做3D真人手办市场价格…

【CSS】div 盒子居中的常用方法

<body><div class"main"><div class"box"></div></div> </body>绝对定位加 margin: auto; &#xff1a; <style>* {padding: 0;margin: 0;}.main {width: 400px;height: 400px;border: 2px solid #000;positio…

海康Visionmaster-全局触发:使用全局触发功能执行流 程的方法

我们这里以 TCP 通讯为例&#xff0c;视觉作为 TCP 服务端&#xff0c;与视觉交互的第三方设备作为 TCP 客户端。当 TCP 客户端连接上视觉服务端后&#xff0c;客户端发送字符串 T1,视觉执行流程 1&#xff1b; 客户端发送字符串 T2&#xff0c;视觉执行流程 2。 这样的需求我…

apachesolr启动带调试

这里solr.cmd报错&#xff0c;报错原因是java版本问题&#xff0c;后面发现这是因为多个java版本导致读取java_home失败&#xff0c; 那么我们修改solr.cmd中的JAVA_HOME为SOLR_JAVA_HOME IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME%SOLR_JAVA_HOME%"环境变量将SOLR…

linux傻瓜式安装Java环境及中间件

linux配置Java环境及中间件 1.傻瓜式安装Java1.下载2.追加3.刷新测试 2.傻瓜式安装docker1.docker卸载2.docker安装 3.Docker傻瓜式安装Redis1.傻瓜式安装安装并配置 4.Docker傻瓜式安装RabbitMQ5.Docker傻瓜式安装MySql1.拉取2.配置 6.傻瓜式安装Nacos1.官网下载nacos2.SQL文件…

皮肤病辅助诊断软件,基于Android编写

1.系统介绍 编写的皮肤病辅助诊断软件&#xff0c;包括皮肤病识别、皮肤病区域分割、皮肤病信息介绍、识别历史记录查询、简单图像处理操作以及本机信息查询等功能 2.登录界面 运行之后首先显示登录界面 3.注册界面 注册一个账号 4.主界面 输入用户名密码点击登录按钮…

NI-9236 国产化10 kS/s/ch,350 Ω四分之一桥应变计,8通道C系列应变/桥输入模块

10 kS/s/ch&#xff0c;350 Ω四分之一桥应变计&#xff0c;8通道C系列应变/桥输入模块 NI‑9236可同步测量所有通道的动态应变&#xff0c;从而实现了高速同步测量。 该功能对于需要在特定时刻对多个通道进行比较的应用&#xff08;例如冲击测试&#xff09;非常重要。\n\nNI…

Python基础入门例程42-NP42 公式计算器(运算符)

最近的博文&#xff1a; Python基础入门例程41-NP41 二进制位运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程40-NP40 俱乐部的成员&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程39-NP39 字符串之间的比较&#xff08;运算符&#xff09;-C…

mysql、clickhouse时间日期加法

mysql 在’2023-10-27 23:59:59’上增加5秒&#xff1a; SELECT DATE_ADD(2023-10-27 23:59:59, INTERVAL 5 second);clickhouse SELECT date_add(SECOND, 3, toDate(2018-01-01 00:00:00));clickhouse时间按秒、分、时、日、月、年作差 按秒&#xff1a; SELECT dateDiff…

「Verilog学习笔记」位拆分与运算

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 1、寄存器的位是可以分开单独运算的&#xff0c;并不是一个输入就一定是一个数据&#xff0c;在很多情况下&#xff0c;一个输入既包括数据又包括地址等其他有效信息 2、需…

Python基础入门例程43-NP43 判断布尔值(条件语句)

最近的博文&#xff1a; Python基础入门例程42-NP42 公式计算器&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程41-NP41 二进制位运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程40-NP40 俱乐部的成员&#xff08;运算符&#xff09;-CSDN博客…

ChinaSoft 论坛巡礼 | 系统与网络安全论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

基于STM32F412RET6的智能桶硬件设计

一、智能桶功能需求&#xff1a; 智能桶是一直采用Cortex-M4 嵌入式平台&#xff0c;搭载NB-IotTO通讯模组、智能称重采集、智能门锁监控以及温度监测等装置。主要功能如下&#xff1a; ▲ 具有GPS定位功能&#xff0c;可以通过后台APP实时定位智能桶的位置。 ▲ 具有温度监测功…

python栈_简单算术表达式_加减乘除

# 从左到右遍历中缀表达式中的每个数字和符号&#xff0c;若是数字就输出&#xff0c;即成为后缀表达式的一部分&#xff1b;若是符号则要分为两种情况&#xff1a; # (1)是括号时&#xff0c;如果是左括号&#xff0c;直接将左括号入栈&#xff0c;如果是右括号则栈顶元素依次…

Springboot 乡村儿童爱心帮扶平台-计算机毕设 附源码 21644

乡村儿童爱心帮扶平台设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对乡村儿童爱…

LangChain+LLM实战---ChatGPT的即时插件套件制作

英文原文&#xff1a;Instant Plugins for ChatGPT: Introducing the Wolfram ChatGPT Plugin Kit 在一分钟内构建一个新插件 几周前&#xff0c;我们与OpenAI合作发布了Wolfram插件&#xff0c;使ChatGPT可以使用Wolfram语言和Wolfram|Alpha作为工具&#xff0c;在ChatGPT内部…