这门课解决什么问题

很多写了几年单进程业务代码的开发者,一碰到多线程并发就发虚。代码能编译通过,跑起来却时不时死锁、数据错乱,或者段错误直接崩溃。这通常是因为脑子里只有“创建线程”的概念,却对底层的同步原语、竞态条件和信号打断机制一知半解。这门课不跟你扯高并发架构的宏大叙事,它专门针对 UNIX 和类 UNIX 环境下 C 语言的 POSIX 线程(pthread)编程,帮你把并发底层那些容易踩坑的细节彻底搞透。如果你以前遇到互斥锁加错位置只能瞎猜,或者完全不知道线程私有数据存在的意义,这门课就是来补这个能力缺口的。它要求你已经具备基本的 C 语言语法基础和 Linux 系统操作经验,如果连进程的概念都还模糊,建议先去补进程基础再来看这门课。

建议先看哪几块及资料配合

别一上来就按顺序点播放,建议先从线程简介和线程原语这两块看起。这两节会帮你理清线程在系统层面的本质,搞懂创建、终止和回收的生命周期。很多人写多线程程序内存泄漏,就是因为没搞懂线程退出时的资源回收机制。看完原语,直接跳到线程同步和线程安全这两节,这是整个资料包的核心。听课时绝对不能只用眼睛看,必须把视频里的示例代码敲到本地 Linux 环境里跑。资料里的代码片段是用来验证你理解程度的,练习时尝试故意制造竞态条件:比如去掉互斥锁跑几百次循环,看看结果为什么会错乱,再加上锁观察现象。最后再看线程私有数据和线程与信号这两块,这两部分在实际业务里用得少但极容易出致命 Bug,特别是多线程环境下信号处理的混乱逻辑,必须结合本地手写代码去验证信号到底会打断哪个线程。

学完能独立做什么

看完这套资料,你应该能脱离教程,独立编写和调试安全的并发 C 程序。具体来说,当你在维护老旧的 C 服务端代码时,能一眼看懂别人加锁的临界区是否合理,能自己排查死锁现场,而不是遇到卡死就只能重启服务。面对需要多线程并行处理的任务,你能熟练选用合适的同步机制保证数据一致性,并且知道如何避免不可重入函数导致的崩溃。为了检验自己是否真的补齐了这块缺口,看完后问自己几个问题:多个线程同时访问同一个全局变量,不加锁一定会出错吗?线程私有数据到底是怎么实现每个线程独立副本的?信号到达时,如果没有专门的屏蔽处理,多线程程序会面临什么不可预期的灾难?如果这些都能答清楚,这门课的查漏补缺才算真正到位。

课程目录

1 线程简介 (05:05)
2 线程原语 (24:35)
3 线程同步 (19:25)
4 线程安全 (05:47)
5 线程私有数据 (04:38)
6 线程和信号 (07:39)