logo资料库

C++多线程开发经典书籍.pdf

第1页 / 共620页
第2页 / 共620页
第3页 / 共620页
第4页 / 共620页
第5页 / 共620页
第6页 / 共620页
第7页 / 共620页
第8页 / 共620页
资料共620页,剩余部分请下载后查看
Introduction
前言
关于封面
关于本书
第1章 你好,C++的并发世界
1.1 何谓并发
1.2 为什么使用并发?
1.3 C++中的并发和多线程
1.4 开始入门
1.5 本章总结
第2章 线程管理
2.1 线程管理的基础
2.2 向线程函数传递参数
2.3 转移线程所有权
2.4 运行时决定线程数量
2.5 识别线程
2.6 本章总结
第3章 线程间共享数据
3.1 共享数据带来的问题
3.2 使用互斥量保护共享数据
3.3 保护共享数据的替代设施
3.4 本章总结
第4章 同步并发操作
4.1 等待一个事件或其他条件
4.2 使用期望等待一次性事件
4.3 限定等待时间
4.4 使用同步操作简化代码
4.5 本章总结
第5章 C++内存模型和原子类型操作
5.1 内存模型基础
5.2 C++中的原子操作和原子类型
5.3 同步操作和强制排序
5.4 本章总结
第6章 基于锁的并发数据结构设计
6.1 为并发设计的意义何在?
6.2 基于锁的并发数据结构
6.3 基于锁设计更加复杂的数据结构
6.4 本章总结
第7章 无锁并发数据结构设计
7.1 定义和意义
7.2 无锁数据结构的例子
7.3 对于设计无锁数据结构的指导建议
7.4 本章总结
第8章 并发代码设计
8.1 线程间划分工作的技术
8.2 如何让数据紧凑?
8.3 为多线程性能设计数据结构
8.4 设计并发代码的注意事项
8.5 在实践中设计并发代码
8.6 本章总结
第9章 高级线程管理
9.1 线程池
9.2 中断线程
9.3 本章总结
第10章 多线程程序的测试和调试
10.1 与并发相关的错误类型
10.2 定位并发错误的技术
10.3 本章总结
附录A C++11语言特性简明参考(部分)
A.1 右值引用
A.2 删除函数
A.3 默认函数
A.4 常量表达式函数
A.5 Lambda函数
A.6 变参模板
A.7 自动推导变量类型
A.8 线程本地变量
A.9 本章总结
附录B 并发库简要对比
附录C 消息传递框架与完整的ATM示例
附录D C++线程类库参考
D.1 chrono头文件
D.2 condition_variable头文件
D.3 atomic头文件
D.4 future头文件
D.5 mutex头文件
D.6 ratio头文件
D.7 thread头文件
资源
目錄 Introduction 前言 关于封面 关于本书 第1章 你好,C++的并发世界 1.1 何谓并发 1.2 为什么使用并发? 1.3 C++中的并发和多线程 1.4 开始入门 1.5 本章总结 第2章 线程管理 2.1 线程管理的基础 2.2 向线程函数传递参数 2.3 转移线程所有权 2.4 运行时决定线程数量 2.5 识别线程 2.6 本章总结 第3章 线程间共享数据 3.1 共享数据带来的问题 3.2 使用互斥量保护共享数据 3.3 保护共享数据的替代设施 3.4 本章总结 第4章 同步并发操作 4.1 等待一个事件或其他条件 4.2 使用期望等待一次性事件 4.3 限定等待时间 4.4 使用同步操作简化代码 4.5 本章总结 第5章 C++内存模型和原子类型操作 5.1 内存模型基础 1.1 1.2 1.3 1.4 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.8 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9 1.9.1 2
5.2 C++中的原子操作和原子类型 5.3 同步操作和强制排序 5.4 本章总结 第6章 基于锁的并发数据结构设计 6.1 为并发设计的意义何在? 6.2 基于锁的并发数据结构 6.3 基于锁设计更加复杂的数据结构 6.4 本章总结 第7章 无锁并发数据结构设计 7.1 定义和意义 7.2 无锁数据结构的例子 7.3 对于设计无锁数据结构的指导建议 7.4 本章总结 第8章 并发代码设计 8.1 线程间划分工作的技术 8.2 如何让数据紧凑? 8.3 为多线程性能设计数据结构 8.4 设计并发代码的注意事项 8.5 在实践中设计并发代码 8.6 本章总结 第9章 高级线程管理 9.1 线程池 9.2 中断线程 9.3 本章总结 第10章 多线程程序的测试和调试 10.1 与并发相关的错误类型 10.2 定位并发错误的技术 10.3 本章总结 附录A C++11语言特性简明参考(部分) A.1 右值引用 A.2 删除函数 A.3 默认函数 A.4 常量表达式函数 A.5 Lambda函数 1.9.2 1.9.3 1.9.4 1.10 1.10.1 1.10.2 1.10.3 1.10.4 1.11 1.11.1 1.11.2 1.11.3 1.11.4 1.12 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.13 1.13.1 1.13.2 1.13.3 1.14 1.14.1 1.14.2 1.14.3 1.15 1.15.1 1.15.2 1.15.3 1.15.4 1.15.5 3
A.6 变参模板 A.7 自动推导变量类型 A.8 线程本地变量 A.9 本章总结 附录B 并发库简要对比 附录C 消息传递框架与完整的ATM示例 附录D C++线程类库参考 D.1 chrono头文件 D.2 condition_variable头文件 D.3 atomic头文件 D.4 future头文件 D.5 mutex头文件 D.6 ratio头文件 D.7 thread头文件 资源 1.15.6 1.15.7 1.15.8 1.15.9 1.16 1.17 1.18 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.19 4
Introduction C++ Concurrency In Action Practical Multithreading 作者:Anthony Williams 译者:陈晓伟 本书概述 作为对《C++ Concurrency in Action》的中文翻译。 本书是基于C++11新标准的并发和多线程编程深度指南。 从std::thread、std::mutex、std::future和std::async等基础类的使用,到内存模型和原子操 作、基于锁和无锁数据结构的构建,再扩展到并行算法、线程管理,最后还介绍了多线程代 码的测试工作。 本书的附录部分还对C++11新语言特性中与多线程相关的项目进行了简要的介绍,并提供了 C++11线程库的完整参考。 本书适合于需要深入了解C++多线程开发的读者,以及使用C++进行各类软件开发的开发人 员、测试人员。 对于使用第三方线程库的读者,也可以从本书后面的章节中了解到相关的指引和技巧。 同时,本书还可以作为C++11线程库的参考工具书。 书与作者 Anthony Williams是BSI C++小组的成员,拥有10多年C++应用经验。 如今多核芯处理器使用的越来越普遍。C++11标准支持多线程,这就需要程序员掌握多线程编 程的原则、技术和新语言中的并发特性,确保自己处于时代前沿。 无论你的C++技术如何,本书都会指引你使用C++11写出健壮和优雅的多线程应用。本书将会 探讨线程的内存模型,新的多线程库,启动线程和同步工具。在这个过程中,我们会了解并 发程序中较为棘手的一些问题。 内容的大体结构: C++11编程 5
Introduction 多核芯编程 简单例子用于学习,复杂例子用于实践 本书是为C++程序员所写,同僚中可能有人对并发还没什么了解,估计也有人已经使用其他语 言、API或平台写过多线程程序。不过,在看本书的时候,你们都在同一“起跑线”上。 访问本书论坛曼宁-C++ Concurrency in Action可获取免费试读章节电子书。 本书相关 github 翻译地址:https://github.com/xiaoweiChen/Cpp_Concurrency_In_Action gitbook 在线阅读:http://chenxiaowei.gitbooks.io/cpp_concurrency_in_action/ 书中源码:https://github.com/bsmr-c-cpp/Cpp-Concurrency-in-Action 学习C++11/14: http://www.bogotobogo.com/cplusplus/C11 6
前言 前言 我与多线程的邂逅是在毕业后的第一份工作中。那时我们正在写一个填充数据库的程序。不 过,需要处理的数据量很大,每条记录都是独立的,并且需要在插入数据库之前,对数据量 进行合理分配。为了充分利用10核UltraSPARC CPU(Ultra Scalable Processor ARChitecture,终极可扩充处理器架构(大端)),我们使用了多线程,每个线程处理自己所要 记录的数据。我们使用C++和POSIX线程库完成编码,也犯了一些错误——当时,多线程对 于我们来说是一个新事物——不过,最后我们还是完成了。也是在做这个项目的时候,我开 始注意C++标准委员会和刚刚发布的C++标准。 我对多线程和并发有着浓厚的兴趣。虽然,别人觉得多线程和并发难用、复杂,还会让代码 出现各种各样的问题,不过,在我看来这是一种强有力的工具,能让你充分使用硬件资源, 让你的程序运行的更快。 从那以后,我开始使用多线程和并发在单核机器上对应用性能和响应时间进行改善。这里, 多线程可以帮助你隐藏一些耗时的操作,比如I/O操作。同时,我也开始学习在操作系统级别 上使用多线程,并且了解Intel CPU如何处理任务切换。 同时,对C++的兴趣让我与ACCU有了联系,之后是BSI(英国标准委员会)中的C++标准委员 会,还有Boost。也是因为兴趣的原因,我参与了Boost线程库的初期开发工作,虽然初期版 本已经被开发者们放弃,但是我抓住了这次机会。直到现在,我依然是Boost线程库的主要开 发者和维护者。 作为C++标准委员会的一员,对现有标准的缺陷的和不足进行改善,并为新标准提出建议(新 标准命名为C++0x是希望它能在2009年发布,不过最后因为2011年才发布,所以官方命名为 C++11)。我也参与很多BSI的工作,并且我也为自己的建议起草建议书。当委员会将多线程提 上C++标准的日程时,我高兴得差点飞起来,因为我起草及合著的多线程和并发相关的草案, 将会成为新标准的一部分。新标准将我(计算机相关)的两大兴趣爱好——C++和多线程——结 合起来,想想还有点小激动。 本书旨在教会其他C++开发者如何安全、高效地使用C++11线程库。我对C++和多线程的热 爱,希望你也能感受得到。 7
关于封面 封面图片介绍 本书的封面图片的标题是“日本女性的着装”(Habit of a Lady of Japan)。这张图源自Thomas Jefferys所著的《不同民族服饰的收藏》(Collection of the Dress of Different Nations)[1]第四 卷(大概在1757年到1772年间出版)。Thomas收集的服饰包罗万象,他的绘画优美而又细腻, 对欧洲戏剧服装设计产生了长达200多年的影响。服饰中包含着一个文明的过去和现在,不同 时代中各个国家的习俗通过不同的服饰栩栩如生地呈现在伦敦剧院的观众面前。 从上个世纪以来,着装风格已经发生了很多变化,各个国家和区域之间巨大的差异逐渐消 失。现在已经很难分辨出不同洲不同地区的人们的着装差异。或许,我们放弃了这种文化上 的差异,得到的却是更加丰富多彩的个人生活——或者说是一种更加多样有趣、更快节奏的 科技生活。 在各种计算机图书铺天盖地、让人难以分辨的时代,Manning出版社正是为了赞美计算机行业 中的创新性和开拓性,才选用了这个重现两个世纪之前丰富多样的地域风情的图片。 【1】 《iPhone与iPad开发实战》使用了书中的另一张图片,感兴趣的同学可以去图灵社区 进行试读(只免费提供第1章内容),本章翻译复制了这本书翻译的部分内容 8
分享到:
收藏