线程编号 ID
- 理解 C11 标准
- 理解什么是并发编程
- 如何编写可移植的并发程序
- 掌握线程的创建, 卸载, 强制完成
- 理解互斥的使用
- 理解条件变量
- 原子操作
多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个 CPU 核心在执行该程序。当一个程序运行在多线程下,就好像有多个 CPU 在同时执行该程序。
多线程比多任务更加有挑战。多线程是在同一个程序内部并行执行,因此会对相同的内存空间进行并发读写操作。这可能是在单线程程序中从来不会遇到的问题。其中的一些错误也未必会在单 CPU 机器上出现,因为两个线程从来不会得到真正的并行执行。然而,更现代的计算机伴随着多核CPU的出现,也就意味着不同的线程能被不同的 CPU 核得到真正意义的并行执行。
如果一个线程在读一个内存时,另一个线程正向该内存进行写操作,那进行读操作的那个线程将获得什么结果呢?是写操作之前旧的值?还是写操作成功之后的新值?或是一半新一半旧的值?或者,如果是两个线程同时写同一个内存,在操作完成后将会是什么结果呢?是第一个线程写入的值?还是第二个线程写入的值?还是两个线程写入的一个混合值?因此如没有合适的预防措施,任何结果都是可能的。而且这种行为的发生甚至不能预测,所以结果也是不确定性的。
本课程将介绍 1) 如何创建与管理线程; 2) 内存顺序, 对 CPU 的执行顺序进行限制, 保持程序的正确性; 3) 原子操作, 使得原子变量在某个时刻只被一个线程访问; 4) 互斥, 对共享资源进行保护, 在某个时刻只能一个线程访问; 5) 条件变量, 如何实现多个线程的协作.
C11 是 C 语言的新标准, 它提供了新的内容, 包括线程管理, 原子操作, 互斥 (mutex), 条件变量. 该标准使得我们可以编写可移植的多线程程序.
在 Linux 下, 需要比较新的 GCC, 并且需要打开 C11 支持, -std=c11, 或者使用更新的标准, 例如 -std=c17.
公开笔记对他人可见,有机会被管理员评为“优质笔记”
{{ noteEditor.content.length }}/2000
讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。
课程大纲