推荐答案
测试一下
题目
Regarding threads, which of the following statements are correct?
A. In fork...join_none, the parent thread can continue execution after any one of the internal blocks completes.
B. The disable statement can terminate all threads early
C. The fork...join, fork...join_none, fork...join_any blocks are all executed concurrently
D. In fork...join_none, the parent thread can continue execution after any one of the internal blocks completes.
参考答案与知识点
参考答案
正确答案为 B。
解析:
- A 选项错误。fork...join_none 的特点是父线程不阻塞,立即继续执行,不会等待任何子线程完成。而“等待任何一个内部块完成”是 fork...join_any 的特性。题目中 A 与 D 内容重复,均为错误描述。
- B 选项正确。disable 语句可以用于终止一个命名块或任务中所有活跃的线程,包括 fork 生成的并发线程,因此可以“终止所有线程 early”。需注意 disable 的作用域,但通常该说法成立。
- C 选项错误。fork...join、fork...join_any 和 fork...join_none 是三种不同的并发控制结构,它们的执行是顺序的(例如在一个 initial 块中依次出现),而不是并发执行的。但每个 fork 块内部的多个线程是并发执行的。选项表述含糊且容易误解为这些块本身同时执行,不符合实际。
易错点:混淆 fork...join_none 与 fork...join_any 的行为;误认为 disable 只能终止单个线程;对“并发执行”的理解不准确,未区分块内线程并发与块间顺序执行。
涉及知识点
- fork...join 线程阻塞机制
- fork...join_any 特性
- fork...join_none 特性
- disable 语句的线程终止作用
- 并发与顺序执行的区别