课程说明
多核CPU的进展和普及,带动软件设计由假象的Multi-tasking 发展到实象的Concurrency。万箭齐发肯定比千山独行速度更快威力更强,但其所需的知识面更广更深、手段更复杂、调试更困难。由于早期的C++标准库未曾支持多线程,程序员只能使用低阶的 O.S. APIs,或市售第三方库 (third party libraries),这影响多线程代码的可移植性和一贯性。2011起始的所谓Modern C++,陆续支持各种多线程相关构件。本课程详细介绍Modern C++标准库的各种多线程构件,并以一个中型实例详细展示如何进行Concurrency。
课程特色
从基础的processes & threads观念谈起,逐步上升到multi-threading & concurrency之各种Modern C++编程手法。本课程无上机 (上机太耗费现场时间),但会对每个主题提供适当且充足的源码示例和解说。
课程对象
「对Multithreading & Concurrency无基础无经验,但有强烈企图心」或「多线程经验丰富,渴望迅速了解Modern C++对于多线程之支持」的程序员/工程师。
课程大纲
1. 浅谈 processes & threads -- 从 O.S.角度
2. 浅谈 concurrency -- 观念和术语
3. 浅谈线程相关之APIs (Windows & POSIX)。
4. 关于线程安全 (Thread Safety);C++标准容器是否线程安全?
5. 第一步,Hello Modern C++ Multi-threading.
6. 高端接口,异步与运行结果.
《future》: future, async(), promise, packaged_task,
7. 低端接口,线程操作.
《thread》: thread, get_id(), hardware_concurrency(), joinable(), join(), detach(), this_thread, yield(), sleep_for(), sleep_until(),
8. 数据共享(Data Sharing) 和竞速(Racing)
《condition_variable》: condition_variable, notify_all(), wait(), wait_for(), wait_until(),
《mutex》: mutex, lock(), unlock(), lock_guard, unique_lock,
《atomic》: atomic, load(), store(),
9. 线程通讯 ITC (Inter-Threads Communication)
10. 线程自有空间 TLS (thread local storage), thread_local
11. 线程池 (Threads Pool)
12. 一个完整的Message Passing Framework & Finite State Machine实例详解 (~800行;占本课程之大比重)
从中不但可学得多线程编程技巧,还可学得Modern C++诸多特性,乃至于 ”面向对象” 和 ”设计模式” 之重要观念。