缺什么补什么:多线程与并发数据结构的实战缺口
很多转岗或查漏补缺的开发者,在学完基础语法后,一到多线程和跨进程通信就抓瞎。写个简单的单链表能跑通,但多个线程同时读写队列,程序不是死锁就是数据错乱。这门课解决的就是这个断层:它不跟你扯深奥的操作系统理论,而是直接拿事件中介者、互斥锁、信号量、环形队列和反向链式栈这些具体结构,把多线程并发编程里最容易踩坑的细节掰开揉碎。如果你写并发代码全靠盲目试错,不知道为什么加锁、不知道跨进程怎么同步事件,那这正好补你的短板。它适合已经掌握指针、结构体和基本函数调用的学习者,纯零基础连分支循环都写不顺的,建议先补基础语法再来看。
建议先看哪几块,资料怎么配合练习
面对这套资料,别按顺序从头硬啃,建议分三条主线推进。第一条是同步机制线:先看事件中介者模式和事件广播,理解组件之间怎么解耦通信;接着死磕信号量、互斥锁以及跨进程的互斥锁、事件、信号量。看这部分时,手边必须开着编译器,边看边把跨进程同步的代码敲一遍,观察不加锁和加锁后的数据差异。第二条是数据结构线:重点看环形队列、反向链式栈以及补充的链表队列。自己动手用数组实现一遍环形队列,体会判空和判满的临界条件。第三条是多线程实战线:直接奔着生产者消费者链式栈和环形队列去,这是面试和实际工程的高频考点。资料里的视频只是导读,核心在于暂停视频后自己敲代码复现,遇到死锁先别急着查答案,用调试工具看线程状态,实在卡住再对照视频里的实现思路查漏补缺。
看完应能回答的问题与独立产出
- 事件中介者模式是如何解决多对象直接互调导致的强耦合问题的?
- 同一进程内的互斥锁与跨进程互斥锁在底层实现和使用限制上有什么本质区别?
- 多线程操作环形队列时,到底锁应该加在入队操作上还是出队操作上?为什么生产者消费者模式下通常需要两个信号量?
- 反向链式栈相比于普通顺序栈,在动态内存分配和线程安全控制上有哪些具体优势?
把这些练熟,学完你应当能独立干两件事:一是从零设计一个多线程任务池,用环形队列做任务缓冲,用互斥锁和信号量保证并发安全;二是能写出一个跨进程的事件通知组件,让两个独立进程通过事件中介者安全地交换数据。别假装什么都懂,自己把生产者消费者模型敲一遍跑通,才算真正补上了这块能力缺口。
课程目录
1 01.事件中介者模式对话模式 (35:18) 2 02.事件广播模式 (18:31) 3 03.信号量 (52:18) 4 04.互斥锁 (18:31) 5 05.mutex跨进程 (19:31) 6 06.event跨进程 (08:10) 7 07.semaphore跨进程 (06:55) 8 08.timeapc (25:41) 9 09.volatile (08:33) 10 10.多线程与队列实战 (18:24) 11 11.数组模式实现队列 (32:45) 12 12.环形队列 (36:58) 13 13.反向链式栈 (18:39) 14 14.生产者消费者链式栈 (25:27) 15 15.生产者消费者环形队列 (27:45) 16 16.(补充)链表队列以及优先队列 (01:09:16) 17 17.(补充)附加队列 顺序队列 (24:23)





