2025年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2026年4月7日 00:06
阅读数 184

评分及理由
(1)得分及理由(满分7分)
学生答案存在多处逻辑错误和信号量定义不完整的问题,与题目要求不符。
- 信号量定义错误:学生定义了 `position = 3; pit = 0; tree = 0; mutex = 1;`。其中 `position` 意图可能对应“可挖坑数”,但命名不清晰,且未在代码中正确使用。`pit` 和 `tree` 的初值设置(0)与题目“初始坑=0”可能对应,但未体现“树坑数量小于3时甲才可以挖树坑”的约束(即最大并行挖坑数为3)。标准答案通过 `sk=3` 和 `empty=0` 两个信号量清晰地实现了这个约束和生产-消费关系。学生方案缺少对“可挖坑数”上限(3)的明确控制。
- 同步逻辑错误:
- 甲(挖坑):代码为 `wait(p); wait(m); 挖坑; signal(m); signal(p);`。这里的 `p` 未定义,从上下文推测可能是 `pit`。若 `pit` 初值为0,则甲一开始就会在 `wait(pit)` 上阻塞,无法开始挖坑,逻辑错误。甲的行为应受“可挖坑数”限制,而不是等待一个初始为0的信号量。
- 乙(放苗填土):代码为 `wait(p); 放树苗; signal(p); wait(m); 填土; signal(m); signal(tree);`。这里 `wait(p)` 同样会阻塞。更重要的是,铁锹(mutex)的使用方式错误。题目指出铁锹用于挖坑和填土,因此甲挖坑和乙填土需要互斥使用铁锹。学生代码中,乙在“放树苗”操作后才申请铁锹(`wait(m)`),这意味着“放树苗”和“填土”之间铁锹可能被甲拿走挖新坑,但乙的“填土”操作本身还未完成,这不符合“放树苗入坑并填土”应作为一个连贯动作使用铁锹(或至少填土必须用铁锹)的语义。标准答案中,乙的整个“入坑并填土”操作都在 `mutexT` 保护下,是合理的。
- 丙(浇水):逻辑 `wait(tree); 浇水;` 基本正确,表示等待有树苗需要浇水。
- 信号量作用不清晰:学生定义的信号量未说明其作用,且在实际使用中逻辑混乱,未能正确构建甲、乙、丙三者的同步关系(甲生产坑、乙消费坑并生产待浇水树苗、丙消费待浇水树苗)。
- 资源互斥问题:学生对铁锹(`mutex`)的互斥使用安排不当,如上...
登录后发布评论
暂无评论,来抢沙发