评分及理由
(1)得分及理由(满分7分)
学生答案定义了多个信号量,试图模拟整个植树过程的同步与互斥。其核心思路是:用 empty 控制甲挖坑的许可(初始为2,表示最多可提前挖2个坑,这与题目“树坑数量小于3时甲才可以挖”条件相符,但题目初始坑=0,所以 empty 初值应为3,学生设为2有误);用 full 表示已挖好待处理的坑;用 shu 表示已种好待浇水的树;用 qiao 和 tong 分别互斥使用铁锹和水桶;用 mutex_1 和 mutex_2 作为额外的互斥锁。
主要问题:
- 信号量 empty 初值应为3(因为初始坑=0,甲最多可提前挖3个坑),学生设为2,导致甲最多只能提前挖2个坑,不符合题目“树坑数量小于3”的条件(应理解为“坑数<3”,即坑数≤2时可挖,所以可挖坑数最大为3)。这是一个逻辑错误。
- 信号量使用冗余:mutex_1 和 mutex_2 的用途不清晰,且与 qiao 信号量功能重叠(qiao 已经用于互斥铁锹,mutex_1 又在甲和乙中保护同一段资源,实际上铁锹互斥只需一个信号量)。这种冗余可能导致死锁或降低并发度,但在此流程中若使用正确尚可运行,不过增加了复杂度且未必要。
- 乙的操作中,P(mutex_2) 和丙中的 P(mutex_2) 似乎想保护某种共享资源,但题目中没有明确需要额外互斥的资源,可能多余。
- 丙的循环缺失:丙的代码中没有 while(1) 循环,这将导致丙只执行一次浇水后结束,不符合持续植树的场景,这是一个明显的逻辑错误。
- 信号量 tong 用于互斥水桶,但浇水动作本身可能不需要互斥(除非水桶是共享资源且浇水过程不能同时进行),题目中水桶只有一个,所以互斥是合理的,但丙中 P(tong) 在 P(shu) 之后,若 shu 无信号则可能阻塞,设计尚可,但整体流程与标准答案相比不够简洁。
根据打分要求:逻辑错误扣分。empty 初值错误和丙缺少循环是明显的逻辑错误,各扣1分。信号量冗余但未导致死锁,不额外扣分。整体思路能实现同步,但细节有误。
得分:7 - 1(empty初值错误) - 1(丙缺少循环) = 5分。
题目总分:5分
登录后发布评论
暂无评论,来抢沙发