Logo
☆☆☆☆☆
0.0
Advanced
14h

现代C++并发编程:充分发挥任何机器的性能

《现代C++中的并发编程》带你深入探索C++当前及未来即将推出的并发特性。 - C++11 和 C++14 提供了构建并发与并行程序的基本组件。 - C++17 引入了标准模板库(STL)中的并行算法,这意味着大多数基于 STL 的算法可以顺序执行、并行执行或向量化执行。 - C++的并发特性仍在持续演进。在C++20中,我们有望获得扩展的未来对象(futures)、协程(co-routines)、事务机制等新功能。 除了详细讲解现代C++中的并发机制外,本课程还提供了大量交互式代码示例,帮助你将理论知识与实际编程相结合,从而获得最佳学习效果。 除了理论讲解,课程还包含大量真实应用场景和使用案例,以及常见的陷阱及其通过最佳实践的应对方法。

21 Lessons
Included in Subscription Plan
Personalized Learning
Powered by AI
现代C++并发编程:充分发挥任何机器的性能
《现代C++中的并发编程》带你深入探索C++当前及未来即将推出的并发特性。 - C++11 和 C++14 提供了构建并发与并行程序的基本组件。 - C++17 引入了标准模板库(STL)中的并行算法,这意味着大多数基于 STL 的算法可以顺序执行、并行执行或向量化执行。 - C++的并发特性仍在...

WHAT YOU'LL LEARN

理解 C++ 内存模型、原子操作、同步与顺序约束以及内存屏障。

Content

21 Lessons • 0 Quizzes • 0 Challenges

简介
  1. 1

    本课程学习指南

快速概览
  1. 1

    C++11 和 C++14:基础

  2. 2

    C++中的多线程

  3. 3

    案例研究

  4. 4

    C++17:标准模板库的并行算法

  5. 5

    C++20:并发的未来

  6. 6

    C++中的挑战性问题

内存模型:契约
  1. 1

    契约(导读)

  2. 2

    基础与挑战(总结)

内存模型:原子操作
  1. 1

    强内存模型

  2. 2

    弱内存模型

  3. 3

    原子标志

  4. 4

    自旋锁与互斥锁

  5. 5

    std::atomic<bool>

  6. 6

    用户自定义原子操作

  7. 7

    所有原子操作

  8. 8

    自由原子函数(非成员函数)

  9. 9

    对 std::shared_ptr 的原子操作

内存模型:同步与顺序约束
  1. 1

    简介

  2. 2

    同步与排序约束的类型

  3. 3

    顺序一致性

  4. 4

    获取-释放语义

  5. 5

    获取-释放语义是否具有传递性?

  6. 6

    获取-释放:常见的误解

  7. 7

    std::memory_order_consume

  8. 8

    带有 std::memory_order_consume 的数据依赖

  9. 9

    宽松语义

内存模型:内存屏障
  1. 1

    围栏作为内存屏障

  2. 2

    三道篱笆

  3. 3

    获取和释放栅栏

  4. 4

    使用原子变量进行同步

  5. 5

    使用栅栏进行同步

多线程:线程
  1. 1

    线程简介

  2. 2

    线程的创建

  3. 3

    管理线程生命周期

  4. 4

    线程生命周期管理:警告与技巧

  5. 5

    向线程传递参数

  6. 6

    线程的参数:未定义行为

  7. 7

    线程的参数 - 竞态条件与锁

  8. 8

    线程的方法

  9. 9

    线程的方法在实际中的应用

多线程:共享数据
  1. 1

    共享数据简介

  2. 2

    互斥锁简介

  3. 3

    互斥锁类型与加锁方法

  4. 4

    互斥锁的问题:死锁

  5. 5

    互斥锁的问题:避免异常

  6. 6

    锁的类型:std::lock_guard

  7. 7

    锁的类型:std::unique_lock

  8. 8

    锁的类型:std::shared_lock

  9. 9

    线程安全的初始化

  10. 10

    线程安全的初始化:常量表达式

  11. 11

    线程安全的初始化:call_once 和 once_flag

  12. 12

    线程安全的初始化 - 具有块作用域的静态变量

多线程:本地数据
  1. 1

    线程局部数据

多线程:条件变量
  1. 1

    条件变量(概览)

  2. 2

    条件变量的注意事项(总结)

多线程:任务
  1. 1

    任务简介

  2. 2

    线程 vs 任务

  3. 3

    std::async 简介

  4. 4

    async:启动策略

  5. 5

    async:发起后不管

  6. 6

    async:并发计算

  7. 7

    std::packaged_task 简介

  8. 8

    Promise 和 Future 简介

  9. 9

    Promise 和 Future:返回异常

  10. 10

    Promise 和 Future:返回通知

  11. 11

    std::shared_future 简介

案例研究:计算向量的和
  1. 1

    简介

  2. 2

    单线程求和:基于范围的 for 循环

  3. 3

    单线程求和:使用 std::accumulate 进行加法运算

  4. 4

    单线程求和:使用锁进行保护

  5. 5

    单线程求和:使用原子操作进行保护

  6. 6

    多线程求和:使用 std::lock_guard

  7. 7

    多线程求和:使用原子变量

  8. 8

    多线程求和:使用 fetch_add 方法

  9. 9

    多线程求和:使用 fetch_add 方法与宽松语义

  10. 10

    线程局部求和:使用局部变量

  11. 11

    线程本地求和:使用具有顺序一致性保证的原子变量

  12. 12

    线程本地求和:使用带宽松语义的原子变量

  13. 13

    线程局部求和:使用线程局部数据

  14. 14

    线程本地求和:使用任务

  15. 15

    计算向量的和:结论

案例研究:单例的线程安全初始化
  1. 1

    简介

  2. 2

    双重检查锁定模式

  3. 3

    性能度量

  4. 4

    经典梅耶斯单例

  5. 5

    线程安全的梅耶斯单例模式介绍

  6. 6

    线程安全的单例模式:std::lock_guard

  7. 7

    线程安全的单例模式:使用 std::call_once 和 std::once_flag

  8. 8

    线程安全的单例模式:原子操作

  9. 9

    结论

案例研究:使用 CppMem 进行持续优化
  1. 1

    C++内存模型简介

  2. 2

    CppMem:概述

  3. 3

    CppMem:非原子变量

  4. 4

    CppMem:锁

  5. 5

    CppMem:具有顺序一致性的原子操作

  6. 6

    CppMem:带有获取-释放语义的原子操作

  7. 7

    CppMem:原子操作与非原子操作

  8. 8

    CppMem:使用宽松语义的原子操作

  9. 9

    结论

标准模板库的并行算法
  1. 1

    执行策略

  2. 2

    并行与向量化执行

  3. 3

    算法

  4. 4

    新算法

  5. 5

    新算法——函数式视角

未来:C++20
  1. 1

    原子智能指针

  2. 2

    使用原子指针的线程安全链表

  3. 3

    扩展未来(Extended Futures)简介

  4. 4

    附加扩展未来

  5. 5

    创造新的未来

  6. 6

    门闩和屏障

  7. 7

    事务内存 - 概述

  8. 8

    事务内存的两种类型

  9. 9

    协程简介

  10. 10

    协程:更多细节

  11. 11

    任务块

编码示例
  1. 1

    ABA 问题

  2. 2

    阻塞问题

  3. 3

    程序不变量的破坏

  4. 4

    数据竞争

  5. 5

    伪共享

  6. 6

    变量的生命周期

  7. 7

    移动线程

  8. 8

    死锁

  9. 9

    竞争条件

最佳实践
  1. 1

    通用

  2. 2

    内存模型

  3. 3

    多线程:线程

  4. 4

    多线程:共享数据

  5. 5

    多线程:条件变量

时间库
  1. 1

    时间点、时间段与时钟的相互作用

  2. 2

    时间点

  3. 3

    从时间点到日历时间

  4. 4

    时间持续时间(concept)

  5. 5

    时间持续时间计算

  6. 6

    时钟

  7. 7

    睡眠与等待

术语表
  1. 1

    术语表

  2. 2

    在本地机器上运行源代码

关于作者
  1. 1

    关于作者

Certificate of Completion

Showcase your accomplishment by sharing your certificate of completion.

Course Author:Anonymous User

Reviews

Read reviews from students who have taken this course and share your own experience.

Reviews & Comments (0)