C++并发编程实战

第一章:你好,C++并发世界

至C++11开始,C++标准支持多线程程序.

什么是并发

人可以一边唱歌一边跳舞,计算机呢?

单处理器计算机每秒可以切换任务许多次,做一点A任务再做一点B任务,然AB任务看起来是并行发生.这就是任务切换.任务切换可以被看做并发.

多处理器计算机或多核处理器能够真正的并行运行超过一个任务.称为硬件并发.

在单核计算机上,任务切换需要执行一次上下文切换,这需要时间.
并发的两种方式

并发的途径

多进程并发
将一个应用程序分为多个独立的单线程进程,这些进程之间通过进程间通信传递信息.由于操作系统在进程间提供了大量的保护,多进程并发通常设置复杂,速度较慢.
多线程并发
在单个进程中运行多个线程.多线程共享地址空间,不需要线程间的操作保护,因此相比于多进程,多线程开销很小.缺点是:程序员必须确保每个线程访问时看到的数据是一致的.

为什么使用并发

为了提升性能而使用并发.使用并发提升性能方式有二.

  • 任务并行:一个线程执行算法的一部分,另一个线程执行算法的另一部分.
  • 数据并行:每个线程在不同的数据部分上执行相同操作.

什么时候不使用并发

知道何时不适用并发与知道何时使用并发同等重要.
不使用并发的唯一原因是收益比不上成本.

  • 编写并发代码有直接的脑力成本,增加代码的复杂性,可能导致更多的错误.
  • 并发带来的性能
### 关于C++并发编程实战资料与教程 #### 推荐书籍 《C++ 并发编程实战》(C++ Concurrency in Action)是一本经典的书籍,专注于C++11及其后续标准中的并发和多线程编程[^3]。此书由Anthony Williams撰写,详细介绍了如何利用C++标准库中的工具来构建高效的并发程序。书中涵盖了诸如`std::thread`、`std::mutex`、`std::future`和`std::async`等内容,并通过实例演示了如何编写既高效又安全的并发代码。 对于希望深入了解最新特性的开发者,《C++ 并发编程实战》第二版是一个极佳的选择[^4]。这本书不仅覆盖了C++11/14的标准特性,还引入了许多C++17的新功能,例如`std::scoped_lock`和`std::shared_mutex`,同时也展望了C++20的一些新特性,比如`std::jthread`、`std::counting_semaphore`、`std::barrier`和`std::latch`。 #### 源码资源 除了理论知识外,动手实践也是学习的重要环节。《C++ 并发编程实战》一书提供了配套的源码下载链接[^1],这些源码可以帮助读者更直观地理解复杂的并发概念。此外,还有一个专门针对第二版的开源项目,位于[GitCode](https://gitcode.com/gh_mirrors/cp/Cpp-Concurrency-in-Action-2ed)[^5],其中包含了详细的目录结构说明和技术解析文档。 以下是基于该书的一个简单示例,展示如何创建并管理基本的C++线程: ```cpp #include <iostream> #include <thread> void threadFunction() { std::cout << "This is a message from the new thread." << std::endl; } int main() { std::thread t(threadFunction); if (t.joinable()) { t.join(); // Wait for the thread to finish. } std::cout << "Main function continues execution here." << std::endl; return 0; } ``` 以上代码片段展示了如何使用`std::thread`类创建一个新的线程,并确保主线程等待子线程完成后再继续执行。 #### 学习路径建议 由于并发编程涉及较多底层原理,初学者可以从操作系统的基础知识入手,逐步过渡到具体的API应用。同时,阅读官方文档以及参与社区讨论也能有效巩固所学内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值