程序员书库(ID:OpenSourceTop)编译
书单来自:https://www.rangakrish.com/index.php/2019/03/10/book-review-c-concurrency-in-action/
并发最简单的解释就是指两个或更多独立的活动同时发生。计算机中的并发指的是在单个系统里同时执行多个独立的活动,而不是顺序地或是一个接一个地。
编程中并发的途径又分为多进程并发和多线程并发,编程中使用并发有着诸多的好处,但是呢,1998年C++标准版不承认线程的存在,因此你没办法在缺少编译器相关扩展的情况下编写多线程应用程序,直到C++ 11到来,C++11 不仅有了一个全新的线程感知内存模型,C++标准库也被扩展了,增加了并发和多线程编程特性
关于C++并发的书籍市面上并不多,今天和大家讨论一本刚刚修订出版的新书 ——《C++并发编程》,本书在美亚上已经获得4.2高分
- 美亚评分4.0
- 全面覆盖C++ 17功能
- 作者一直是BSI C ++ Panel的活跃成员
这本书的第一版于2012年发布,涵盖了C++ 11的并发性,而从那以后C++也有了很多的改变,目前的C ++ 17在并发支持方面更加丰富,特别是在并行算法领域。2月份修订发布的这本书对C++ 17有了更好的补充。
书中亮点
这本书有11章。此版本与前一版本的主要区别在于,第10章关于“并行算法”在是全新加入的。
前两章主要涉及线程的基础知识,包括创建线程、等待线程完成和转移线程的所有权等,还简要讨论了如何确定硬件支持的线程数,以便能够动态地确定要生成的最佳线程数。
第3章讨论了线程间共享数据的问题,以及正确使用互斥元保护共享数据。一些有趣但不太常见的情况可以通过使用std::call_once()函数来处理
同步并发操作是第四章的重点。这里包括条件变量、时间段、超时函数等。本章的一个有趣部分是关于并发TS中指定的延续样式并发性。这个功能虽然还没有在标准中实现,但是可以通过std::experimental获得。
第5章从线程的角度介绍了C++内存模型的重要内容。你甚至可以把这一章当成这本书的第一章,因为其他一切的内容都是在这一章的基础上。
第6章和第7章讨论了如何设计基于锁的并发数据结构和无锁的并发数据结构。虽然一般的建议是使用库中的标准数据结构和算法,但通常情况下,我们必须实现自己的特定领域的数据结构。这两章正式解释了这一点
在第8章中,作者对如何设计并发代码给出了详细的指导。这里讨论了有关性能、可伸缩性和安全性的重要问题。这些都是开发人员需要注意的实际问题。
第9章讨论了线程管理相关更细节的方面。本章涉及的两个关键概念是线程池和线程中断。二者都很重要,并且也已经在实际应用中得到了广泛的应用。
第10章是STL中对并行算法的支持。这个功能是C++ 17中的主要新增功能之一。几种STL算法,包括复制、查找、排序和转换等,本章还给出了使用不同执行策略std::execution::seq、std::execution::par、std::execution::par_unseq的示例。
测试和调试多线程代码是一个非常关键的一点。第11章主要涵盖了这个主题,并有一些有用的提示。
读者书评
18年就拿到了这本书的第二版一口气读完了,跟第一版相比新添加了很多c++17的特性C++领域,多线程的书籍很少。毕竟多线程对于C++来说是属于语言之外的东西,本书内容是比较丰富,除了标准外,还有一些基本的多线程编程经验,非常受益今年2月,github上有朋友告诉我第二版出来了,我才注意到。没有想到18年的时候,就有同学已经读完了……
写在最后
总的来说,这是一本非常有用和可读的书,每个C++开发人员都应该阅读它。然而,读了第一版后,我觉得作者还可以在修订版中添加一些更有用的材料;但是可能是因为他担心过时而急于出版这本书,而没在本书中看到这些内容,不过话说回来,如果你没有第一版,现在正是读第二版的最佳时期。