Content
21 Lessons • 0 Quizzes • 0 Challenges
简介
- 1
本课程学习指南
快速概览
- 1
C++11 和 C++14:基础
- 2
C++中的多线程
- 3
案例研究
- 4
C++17:标准模板库的并行算法
- 5
C++20:并发的未来
- 6
C++中的挑战性问题
内存模型:契约
- 1
契约(导读)
- 2
基础与挑战(总结)
内存模型:原子操作
- 1
强内存模型
- 2
弱内存模型
- 3
原子标志
- 4
自旋锁与互斥锁
- 5
std::atomic<bool>
- 6
用户自定义原子操作
- 7
所有原子操作
- 8
自由原子函数(非成员函数)
- 9
对 std::shared_ptr 的原子操作
内存模型:同步与顺序约束
- 1
简介
- 2
同步与排序约束的类型
- 3
顺序一致性
- 4
获取-释放语义
- 5
获取-释放语义是否具有传递性?
- 6
获取-释放:常见的误解
- 7
std::memory_order_consume
- 8
带有 std::memory_order_consume 的数据依赖
- 9
宽松语义
内存模型:内存屏障
- 1
围栏作为内存屏障
- 2
三道篱笆
- 3
获取和释放栅栏
- 4
使用原子变量进行同步
- 5
使用栅栏进行同步
多线程:线程
- 1
线程简介
- 2
线程的创建
- 3
管理线程生命周期
- 4
线程生命周期管理:警告与技巧
- 5
向线程传递参数
- 6
线程的参数:未定义行为
- 7
线程的参数 - 竞态条件与锁
- 8
线程的方法
- 9
线程的方法在实际中的应用
多线程:共享数据
- 1
共享数据简介
- 2
互斥锁简介
- 3
互斥锁类型与加锁方法
- 4
互斥锁的问题:死锁
- 5
互斥锁的问题:避免异常
- 6
锁的类型:std::lock_guard
- 7
锁的类型:std::unique_lock
- 8
锁的类型:std::shared_lock
- 9
线程安全的初始化
- 10
线程安全的初始化:常量表达式
- 11
线程安全的初始化:call_once 和 once_flag
- 12
线程安全的初始化 - 具有块作用域的静态变量
多线程:本地数据
- 1
线程局部数据
多线程:条件变量
- 1
条件变量(概览)
- 2
条件变量的注意事项(总结)
多线程:任务
- 1
任务简介
- 2
线程 vs 任务
- 3
std::async 简介
- 4
async:启动策略
- 5
async:发起后不管
- 6
async:并发计算
- 7
std::packaged_task 简介
- 8
Promise 和 Future 简介
- 9
Promise 和 Future:返回异常
- 10
Promise 和 Future:返回通知
- 11
std::shared_future 简介
案例研究:计算向量的和
- 1
简介
- 2
单线程求和:基于范围的 for 循环
- 3
单线程求和:使用 std::accumulate 进行加法运算
- 4
单线程求和:使用锁进行保护
- 5
单线程求和:使用原子操作进行保护
- 6
多线程求和:使用 std::lock_guard
- 7
多线程求和:使用原子变量
- 8
多线程求和:使用 fetch_add 方法
- 9
多线程求和:使用 fetch_add 方法与宽松语义
- 10
线程局部求和:使用局部变量
- 11
线程本地求和:使用具有顺序一致性保证的原子变量
- 12
线程本地求和:使用带宽松语义的原子变量
- 13
线程局部求和:使用线程局部数据
- 14
线程本地求和:使用任务
- 15
计算向量的和:结论
案例研究:单例的线程安全初始化
- 1
简介
- 2
双重检查锁定模式
- 3
性能度量
- 4
经典梅耶斯单例
- 5
线程安全的梅耶斯单例模式介绍
- 6
线程安全的单例模式:std::lock_guard
- 7
线程安全的单例模式:使用 std::call_once 和 std::once_flag
- 8
线程安全的单例模式:原子操作
- 9
结论
案例研究:使用 CppMem 进行持续优化
- 1
C++内存模型简介
- 2
CppMem:概述
- 3
CppMem:非原子变量
- 4
CppMem:锁
- 5
CppMem:具有顺序一致性的原子操作
- 6
CppMem:带有获取-释放语义的原子操作
- 7
CppMem:原子操作与非原子操作
- 8
CppMem:使用宽松语义的原子操作
- 9
结论
标准模板库的并行算法
- 1
执行策略
- 2
并行与向量化执行
- 3
算法
- 4
新算法
- 5
新算法——函数式视角
未来:C++20
- 1
原子智能指针
- 2
使用原子指针的线程安全链表
- 3
扩展未来(Extended Futures)简介
- 4
附加扩展未来
- 5
创造新的未来
- 6
门闩和屏障
- 7
事务内存 - 概述
- 8
事务内存的两种类型
- 9
协程简介
- 10
协程:更多细节
- 11
任务块
编码示例
- 1
ABA 问题
- 2
阻塞问题
- 3
程序不变量的破坏
- 4
数据竞争
- 5
伪共享
- 6
变量的生命周期
- 7
移动线程
- 8
死锁
- 9
竞争条件
最佳实践
- 1
通用
- 2
内存模型
- 3
多线程:线程
- 4
多线程:共享数据
- 5
多线程:条件变量
时间库
- 1
时间点、时间段与时钟的相互作用
- 2
时间点
- 3
从时间点到日历时间
- 4
时间持续时间(concept)
- 5
时间持续时间计算
- 6
时钟
- 7
睡眠与等待
术语表
- 1
术语表
- 2
在本地机器上运行源代码
关于作者
- 1
关于作者
Certificate of Completion
Showcase your accomplishment by sharing your certificate of completion.
Course Author:Anonymous User