【官方旗舰店】C++并发编程实战 第2二版 多线程编程深度指南 c语言程序设计 C++计算机程序设计入门教程c++ primer计算机应用基础
Посилання на оригінал- 100 — 1999 шт 5000$ за шт.
- 2000 — 50119 шт 4000$ за шт.
- 50120+ шт 3000$ за шт.
Перевірка + фотозвіт за 1.5$
Ми перевіряємо товар та робимо фотозвіт, щоб ви могли переконатися, що отримаєте потрібний товар без браку та пошкоджень.
Доставка з Китаю в Україну, Узбекистан, країни Європи.
Сплачується після прибуття на склад у Китаї
Повернення товару можливе лише поки товар знаходиться у нас на складі в Китаї. Після відправки з Китаю товар поверненню не підлягає.
Фото та опис товару
|
|
这是*本介绍C++并发和多线程编程的深度指南。本书从C++标准程序库的各种工具讲起,介绍线程管控、在线程间共享数据、并发操作的同步、C++内存模型和原子操作等内容。同时,本书还介绍基于锁的并发数据结构、*锁数据结构、并发代码,以及*级线程管理、并行算法函数、多线程应用的测试和除错。本书还通过附录及线上资源提供丰富的补充资料,以帮助读者更完整、细*地掌握C++并发编程的知识脉络。 本书适合需要深入了解C++多线程开发的读者,以及使用C++进行各类软件开发的开发人员、测试人员,还可以作为C++线程库的参考工具书。
第 *章 你好,C++并发* *
*.* 什么是并发 2
*.*.* 计算机系统中的并发 2
*.*.2 并发的方式 4
*.*.3 并发与并行 5
*.2 为什么使用并发技术 6
*.2.* 为分离关注点而并发 6
*.2.2 为性能而并发:任务并行和数据并行 7
*.2.3 什么时候避*并发 8
*.3 并发与C++多线程 9
*.3.* C++多线程简史 9
*.3.2 新标准对并发的支持 *0
*.3.3 C++*4和C++*7进*步
支持并发和并行 *0
*.3.4 标准C++线程库的效率 *0
*.3.5 平台*属的工具 *2
*.4 启程上路 *2
实例—“Hello Concurrent World” *2
*.5 小结 *3
第 2章 线程管控 *5
2.* 线程的基本管控 *5
2.*.* 发起线程 *6
2.*.2 等待线程完成 *9
2.*.3 在出现异常的情况下等待 *9
2.*.4 在后台运行线程 2*
2.2 向线程函数传递参数 23
2.3 移交线程归属权 26
2.4 在运行时选择线程数量 30
2.5 识别线程 33
2.6 小结 35
第3章 在线程间共享数据 37
3.* 线程间共享数据的问题 38
3.*.* 条件竞争 39
3.*.2 *止恶性条件竞争 40
3.2 用互斥*护共享数据 4*
3.2.* 在C++中使用互斥 4*
3.2.2 组织和编排代码以*护共享数据 43
3.2.3 发现接口固有的条件竞争 44
3.2.4 死锁:问题和解决方法 5*
3.2.5 *范死锁的补充准则 53
3.2.6 运用std::unique_lock<>灵活加锁 60
3.2.7 在*同作用域之间转移互斥归属权 6*
3.2.8 按适合的粒度加锁 62
3.3 *护共享数据的其他工具 64
3.3.* 在初始化过程中*护共享数据 65
3.3.2 *护甚少更新的数据结构 68
3.3.3 递归加锁 70
3.4 小结 7*
第4章 并发操作的同步 73
4.* 等待事件或等待其他条件 73
4.*.* 凭借条件变量等待条件成立 75
4.*.2 利用条件变量构建线程*的队列 77
4.2 使用future等待*次性事件发生 82
4.2.* 从后台任务返回值 83
4.2.2 关联future实例和任务 85
4.2.3 *建std::promise 88
4.2.4 将异常*存到future中 90
4.2.5 多个线程*起等待 9*
4.3 *等待 94
4.3.* 时钟类 94
4.3.2 时长类 95
4.3.3 时间点类 97
4.3.4 接受*时时限的函数 99
4.4 运用同步操作简化代码 *0*
4.4.* 利用future进行函数式编程 *0*
4.4.2 使用消息传递进行同步 *06
4.4.3 符合并发技术规约的后续风格并发 **0
4.4.4 后续函数的连锁调用 **2
4.4.5 等待多个future **5
4.4.6 运用std::experimental::when_any()函数等待多个
future,直到其中之*准备*绪 **7
4.4.7 线程闩和线程卡——并发技术规约提出的新*性 *20
4.4.8 基本的线程闩类std::experimental::latch *2*
4.4.9 基本的线程卡类std::experimental::barrier *22
4.4.*0 std::experimental::flex_barrier——std::experimental::barrier的灵活版本 *24
4.5 小结 *25
第5章 C++内存模型和原子操作 *27
5.* 内存模型基础 *28
5.*.* 对象和内存区域 *28
5.*.2 对象、内存区域和并发 *29
5.*.3 改动序列 *30
5.2 C++中的原子操作及其类别 *3*
5.2.* 标准原子类型 *3*
5.2.2 操作std::atomic_flag *35
5.2.3 操作std::atomic *37
5.2.4 操作std::atomic :算术形式的指针运算 *39
5.2.5 操作标准整数原子类型 *40
5.2.6 泛化的std::atomic<>类模板 *4*
5.2.7 原子操作的非成员函数 *43
5.3 同步操作和强制次序 *45
5.3.* 同步关系 *47
5.3.2 先行关系 *47
5.3.3 原子操作的内存次序 *49
5.3.4 释放序列和同步关系 *67
5.3.5 栅栏 *69
5.3.6 凭借原子操作令非原子操作服从内存次序 *7*
5.3.7 强制非原子操作服从内存次序 *72
5.4 小结 *75
第6章 设计基于锁的并发数据结构 *77
6.* 并发设计的内涵 *78
6.2 基于锁的并发数据结构 *79
6.2.* 采用锁实现线程*的栈容器 *80
6.2.2 采用锁和条件变量实现线程*的队列容器 *82
6.2.3 采用*细粒度的锁和条件变量实现线程*的队列容器 *86
6.3 设计更复杂的基于锁的并发数据结构 *98
6.3.* 采用锁编写线程*的查找表 *98
6.3.2 采用多种锁编写线程*的链表 204
6.4 小结 208
第7章 设计*锁数据结构 209
7.* 定义和推论 2*0
7.*.* 非阻塞型数据结构 2*0
7.*.2 *锁数据结构 2**
7.*.3 *须等待的数据结构 2*2
7.*.4 *锁数据结构的*点和缺点 2*2
7.2 *锁数据结构范例 2*3
7.2.* 实现线程*的*锁栈 2*4
7.2.2 制止麻烦的内存泄漏:在*锁数据结构中管理内存 2*7
7.2.3 运用风险指针检测*法回收的节点 223
7.2.4 借引用计数检测正在使用中的节点 23*
7.2.5 为*锁栈容器施加内存模型 237
7.2.6 实现线程*的*锁队列 242
7.3 实现*锁数据结构的原则 254
7.3.* 原则*:在原型设计中使用std::memory_order_seq_cst次序 254
7.3.2 原则2:使用*锁的内存回收方案 255
7.3.3 原则3:*范ABA问题 255
7.3.4 原则4:找出忙等循环,协助其他线程 256
7.4 小结 256
第8章 设计并发代码 257
8.* 在线程间切分任务的方法 258
8.*.* 先在线程间切分数据,再开始处理 258
8.*.2 以递归方式划分数据 259
8.*.3 依据工作类别划分任务 263
8.2 影响并发代码性能的因素 266
8.2.* 处理器的数量 266
8.2.2 数据竞争和缓存乒乓(cache ping-pong) 267
8.2.3 *经意共享 270
8.2.4 数据的紧凑程度 270
8.2.5 过度任务切换与线程过饱和 27*
8.3 设计数据结构以提*多线程程序的性能 272
8.3.* 针对复杂操作的数据划分 272
8.3.2 其他数据结构的访问模式 275
8.4 设计并发代码时要额外考虑的因素 276
8.4.* 并行算法代码中的异常* 276
8.4.2 可伸缩性和Amdahl定律 283
8.4.3 利用多线程“掩藏”等待行为 285
8.4.4 借并发*性改进响应能力 286
8.5 并发代码的设计实践 287
8.5.* std::for_each()的并行实现 288
8.5.2 std::find()的并行实现 290
8.5.3 std::partial_sum()的并行实现 295
8.6 小结 305
第9章 *级线程管理 307
9.* 线程池 308
9.*.* 最简易可行的线程池 308
9.*.2 等待提交给线程池的任务完成运行 3*0
9.*.3 等待其他任务完成的任务 3*3
9.*.4 避*任务队列上的争夺 3*6
9.*.5 任务窃取 3*8
9.2 中断线程 322
9.2.* 发起*个线程,以及把它中断 323
9.2.2 检测线程是否被中断 324
9.2.3 中断条件变量上的等待 325
9.2.4 中断条件变量std::condition_variable_any上的等待 328
9.2.5 中断其他阻塞型等待 330
9.2.6 处理中断 33*
9.2.7 在应用程序退出时中断后台任务 332
9.3 小结 333
第 *0章 并行算法函数 335
*0.* 并行化的标准库算法函数 335
*0.2 执行策略 336
*0.2.* 因*执行策略而普遍产生的作用 336
*0.2.2 std::execution::sequenced_policy 337
*0.2.3 std::execution::parallel_policy 338
*0.2.4 std::execution::parallel_unsequenced_policy 339
*0.3 C++标准库的并行算法函数 339
*0.3.* 并行算法函数的使用范例 342
*0.3.2 访问计数 344
*0.4 小结 346
第 **章 多线程应用的测试和除错 347
**.* 与并发相关的错误类型 347
**.*.* 多余的阻塞 348
**.*.2 条件竞争 348
**.2 定位并发相关的错误的技法 349
**.2.* 审查代码并定位潜在错误 350
**.2.2 通过测试定位与并发相关的错误 352
**.2.3 设计可测试的代码 353
**.2.4 多线程测试技术 355
**.2.5 以*定结构组织多线程的测试代码 357
**.2.6 测试多线程代码的性能 360
**.3 小结360
附录A C++***要:*分语言*性 36*
A.* 右值引用 36*
A.*.* 移动语义 362
A.*.2 右值引用和函数模板 365
A.2 删除函数 366
A.3 默认函数 368
A.4 常量表达式函数 37*
A.4.* constexpr关键字和用户定义型别 373
A.4.2 constexpr对象 376
A.4.3 constexpr函数要符合的条件 376
A.4.4 constexpr与模板 377
A.5 lambda函数 377
A.6 变参模板 382
A.7 自动推导变量的型别 386
A.8 线程局*变量 387
A.9 类模板的参数推导 389
A.*0 小结 389
附录B 各并发程序库的简要
对比 39*
附录C 消息传递程序库和完整
的自动柜员机范例 393
安东尼·威廉姆斯(Anthony Williams),C++开发人员、顾问、培训师,英*标准协会C++标准组成员,拥有*过20年的C++开发经验,*立编写或合著了众多C++标准委员会文件,为C++**标准引入了线程库,实现了工具“just::thread Pro”(Just Software Solutions公司的产品),并持续*力于开发C++的新*性,以增强C++并发工具集的功能,这两者*遵循C++标准和提案。