1. 线程的使用
1.1 程序和模块
1.2 什么是线程?
1.3 线程小结
1.4 练习
答案:ABC
解析:D错误,initial中线程不一定会结束,要看initial块中的语句是什么。
答案:ABCD
2. 线程的控制
2.1 fork并行线程语句块
如上图所示,fork并行线程语句块有2种方式,分别为fork…join, fork…join_any, fork…join_none。下面我们分别说一下各自的功能:
- fork…join:表示T1,2,3并行执行,直到所有的T都执行完成之后,结束。
- fork…join_any:表示T1,2,3并行执行,只要其中有一个完成了,那就可以结束了,但是需要注意的是,其他没有执行完成的T依然可以继续执行。
- fork…join_none:表示T1,2,3并行执行,不管T有没有用执行完成,我都不管了。相当于起到一个“点火”的作用,点着了就跑了!!!
2.1.1 fork…join
2.1.2 fork…join_any
2.1.3 fork…join_none
2.1.4 小练习
答案:A
2.2 等待所有衍生线程
2.3 停止单个线程
2.4 停止多个线程
2.5 停止被多次调用的任务
3. 线程间的通信
3.1 概述
3.2 event事件
3.2.1 举例验证
3.2.2 小练习
答案:BC
解析:考察event触发知识点:@表示可以多次等待事件触发;而.triggered()表示只要有一次事件触发,就会一直满足,不会被阻塞了。
3.3 semaphore旗语
3.3.1 基本操作
3.3.2 为什么要资源共享?
结果:
3.3.3 升级操作
之前我们资源共享的时候可以任意时候归还钥匙,比如原来初始化只有一把钥匙,丈夫还了一把,恰巧妻子也还了一把,那此时不就有2把钥匙了吗?问题是我们不是只有一把吗?出大问题了!!!下边引入管家帮我管理。
3.3.4 小练习
答案:ABCD
3.4 mailbox信箱
3.4.1 基本使用
3.4.2 需求在哪了?举例
3.4.3 替代方案
3.4.4 通过上边两个方案总结
3.4.5 mailbox其他特性
3.4.5.1 event同步
3.4.5.2 semaphore同步
3.4.5.3 mailbox同步
3.4.5.4 结果分析
3.4.6 小练习
答案:ABCD
答案:BC
解析:队列不需要初始化(例化);队列不能赋值传递,需要引用传递ref。
3.5 通信要素的比较