人工精选【夏曹俊】C++11 14 17 20 多线程从原理到线程池实战
这门课的主题很明确:C++ 多线程。从 C++11 引入的 std::thread、mutex、condition_variable 这些基础设施讲起,一路覆盖到 C++14/17/20 陆续补上的新特性,最后落到一个能跑起来的线程池实现上。它不是讲操作系统原理的理论课,也不是只教你调几个 API
会员可免费下载本篇月会员可按日额度下载(每篇扣 1 次)。
开通会员 ›会员 A · 按档位折扣
会员 B
游客按标价购买,不享受上表折扣。
支付成功后自动发放网盘链接,链接失效可找客服免费补
这门课的主题很明确:C++ 多线程。从 C++11 引入的 std::thread、mutex、condition_variable 这些基础设施讲起,一路覆盖到 C++14/17/20 陆续补上的新特性,最后落到一个能跑起来的线程池实现上。它不是讲操作系统原理的理论课,也不是只教你调几个 API 的速查课,中间那条线——线程怎么协调、锁怎么用才不出事、任务怎么排队分发——是它真正想讲清楚的东西。
它解决的是哪类工作场景
如果你写过 C++ 项目,多半遇到过这些情况:一个批量处理任务串行跑太慢,想拆成多线程又担心数据竞争;用 mutex 加了锁,程序偶尔还是崩或者卡死;知道线程池是个好东西,但自己写一个总是漏洞百出,要么任务丢,要么退出时线程回收不干净。这门课针对的就是这类问题。它把并发编程里最容易出错的几个点——共享数据的保护、线程间的等待与唤醒、任务队列的同步——拆开讲,再用一个线程池把这些点串起来。资料里那个基于线程池做批量转码的案例,就是把多线程用在真实任务分发场景里的样子,你能看到线程池在工程中到底怎么被调用。
适合什么基础,先看哪几块
前提是有 C++ 基础:类、模板、智能指针、lambda 要能看懂,否则 std::function 和 std::bind 那部分会卡住。完全没写过 C++ 的话,建议先补语言本身再来。学习顺序上,建议先把 C++11 那部分的核心原语过一遍,尤其是 thread 的启动与 join、mutex 与 lock_guard、condition_variable 的等待通知这三块,它们是后面所有内容的地基。C++14/17 的改进可以快速带过,重点放在 C++20 新增的协调机制上,比如 barrier 这类工具解决的是什么问题、和条件变量比省了哪些代码。线程池部分建议放在最后集中看,因为它是对前面所有知识的综合运用,前面的原语没弄明白,直接看线程池只会照抄代码。
学完能独立做什么,资料怎么用
学完比较现实的目标是:能自己写一个可用的线程池,支持任务提交、异步取结果、安全退出;能判断一段并发代码有没有数据竞争,知道该用锁、原子变量还是条件变量;能读懂项目里现有的多线程模块,而不是绕着走。至于无锁编程、内存序这些更深的内容,这门课只是点到,别指望一次学透。资料使用上,建议不要只看视频。每看完一个原语,自己动手写一个最小示例,比如用两个线程交替打印、用条件变量实现生产者消费者,跑通再往下。线程池那部分最好跟着敲一遍,然后改需求——比如限制队列长度、支持优先级——改的过程才是真正理解的过程。转码案例可以当作综合练习,重点看它怎么把任务切分、怎么控制并发数量,而不是纠结转码工具本身。整体节奏上,多线程的坑大多在运行期才暴露,所以每段代码都要实际跑,光看会漏掉很多问题。
课程目录
课程目录41 集
- 资料.zip
- [73.7 MB] 5-8 完成线程池案例基于ffmpeg工具多线程转码视频_ev.mp4
- [20.5 MB] 6-1 c++20屏障barrier实现线程协调_ev.mp4
- [21.4 MB] 5-7 基于线程池实现音视频批量转码测试任务_ev.mp4
- [36.0 MB] 5-6 异步获取线程池中任务执行结果_ev.mp4
- [14.0 MB] 5-5 使用智能指针管理线程对象和任务对象的生命走起_ev.mp4
- [25.4 MB] 5-4 线程池中在在运行的任务数量获取使用atomic原子变量_ev.mp4
- [10.1 MB] 5-3 完成线程池退出并等待任务处理结束利用lambada表达式_ev.mp4
- [25.1 MB] 5-2 完成线程池任务调度_ev.mp4
- [30.3 MB] 5-1 完成线程池的初始化和启动_ev.mp4
- [23.3 MB] 4-7 线程池实现步骤说明_ev.mp4
- [19.2 MB] 4-6 c++17for_each多核运算示例编码base16_ev.mp4
- [53.2 MB] 4-5 c++11实现多核base16编码并与单核性能测试对比_ev.mp4
- [46.5 MB] 4-4 c++多核计算分析并实现base16编码_ev.mp4
- [49.9 MB] 4-3 async创建异步线程替代thread_ev.mp4
- [32.9 MB] 3-9 条件变量应用线程通信解决线程退出时的阻塞问题_ev.mp4
- [30.2 MB] 4-2 packaged_task 异步调用函数打包_ev.mp4
- [31.3 MB] 4-1 promise和future多线程异步传值_ev.mp4
- [28.6 MB] 【夏曹俊】C++11 14 17
- 20 多线程从原理到线程池实战必看.png [493.5 KB] 3-8 condition_variable代码示例读写线程同步_ev.mp4
- [43.8 MB] 6-2 课程总结_ev.mp4
- [3.8 MB] 3-7 条件变量应用场景_生产者消费者信号处理步骤_ev.mp4
- [27.0 MB] 1-5 线程函数传递指针和引用_ev.mp4
- [22.5 MB] 3-6 项目案例线程通信使用互斥锁和list实现线程通信_ev.mp4
- [51.8 MB] 3-5 c++17scoped_lock解决互锁造成的死锁问题_ev.mp4
- [36.8 MB] 3-3 unique_lock可临时解锁控制超时的互斥体包装器_ev.mp4
- [34.9 MB] 3-4 C++14shared_lock共享锁包装器_ev.mp4
- [12.9 MB] 3-2 c++11RAII控制锁lock_guard_ev.mp4
- [26.7 MB] 3-1 手动实现RAII管理mutex资源_锁自动释放_ev.mp4
- [21.6 MB] 2-4 超时锁timed_mutex和可重入锁recursive_ev.mp4
- [32.8 MB] 2-5 共享锁shared_mutex解决读写问题_ev.mp4
- [24.2 MB] 2-3 互斥锁的坑_线程抢占不到资源原因和解决方法_ev.mp4
- [16.3 MB] 2-2 竞争状态和临界区介绍_互斥锁mutex代码演示_ev.mp4
- [21.4 MB] 2-1 多线程的状态及其切换流程分析_ev.mp4
- [10.5 MB] 1-6 使用成员函数作为线程入口并封装线程基类接口_ev.mp4
- [39.8 MB] 1-4 全局函数作为线程入口分析参数传递内存操作_ev.mp4
- [23.2 MB] 1-7 lambda临时函数作为线程入口_ev.mp4
- [14.2 MB] 1-2 为什么要使用多线程_第一个线程代码示例_ev.mp4
- [25.2 MB] 1-3 thread 对象生命周期和线程等待和分离_ev.mp4
- [26.5 MB] 1-1 课程介绍_ev.mp4
- [15.3 MB] 适合人群 C++开发者 对多线程编程有需求的学习者 希望提升编程能力的工程师 学习收获 掌握C++多线程编程基础 学会使用线程池进行高效编程 提升多线程编程能力 祝您学习愉快! 学有所成,前程似锦!





