C++并发编程(I)

Posted on Sun 07 February 2021 in programming

学习C++并发编程,你可以遵循以下的学习顺序:

  1. 理解并发与并行:首先要理解并发和并行的概念以及两者之间的区别。并发是同时处理多个任务的能力;并行则是同时进行多个任务。并发关注如何最有效的管理和调度在同一时刻可能运行的多个任务,而并行则关注如何最大化利用资源来提升性能。

  2. C++ Threading:了解C++11引入的线程库,这是并发编程的基础。开始时你需要熟悉 std::thread,了解如何启动和同步线程。然后,你需要了解线程间如何共享数据,以及如何使用互斥锁,条件变量等机制来安全的在多个线程间操作共享数据。

  3. Future和Promise: C++11 引入了 std::future и std::promise 两个类,它们提供了一种新的同步原语用于从异步操作中得到结果。你需要了解如何使用它们,并了解其与std::async函数的关系。

  4. 基于锁的数据结构:了解如何使用互斥锁,读写锁来实现并发数据结构,比如线程安全的队列。

  5. 原子操作:C++11 引入了原子操作,也就是 std::atomic<> 类型。熟悉如何对 std::atomic<> 进行操作,并了解其在多线程代码中的重要性。

  6. 无锁数据结构:给高级用户的、可选的课程。通常你会需要理解更低层次的细节,例如CPU缓存,内存屏障和原子操作。

  7. 并行算法:在C++17的STL中,原来的很多算法都有了并行版本。学习并实现那些并行算法,理解它们的工作原理,可以提高代码的性能。

  8. 任务并发模型:C++20的执行器和协程,这两个是当前用于并发和并行编程的热门话题。