文章
7
粉丝
0
获赞
0
访问
63

评分及理由
(1)信号量定义及初值(满分约2分)
学生定义了四个信号量:empty=3(对应可挖坑数量)、mutex=1(铁锹互斥)、full=0(对应已挖坑未种树)、full2=0(对应已种树待浇水)。与标准答案相比,思路基本正确,但命名与标准答案不完全一致(标准答案用 sk、empty、water),这并不扣分。信号量初值设置合理,符合题意“树坑数量小于3时甲才可以挖坑”(初始 empty=3 表示最多可挖3个坑,相当于标准答案的 sk=3)。此处没有逻辑错误,但学生将 empty 用于表示可挖坑数,而标准答案中 empty 表示可使用的树坑数(即已挖坑未种树),两者含义相反但配合后续 wait/signal 使用仍能构成同步关系,属于思路正确但命名习惯不同,不扣分。因此本部分给满分2分。
(2)甲、乙、丙三人的同步互斥实现(满分约4分)
甲:正确使用 wait(empty) 限制挖坑数量不超过3,wait(mutex) 获取铁锹,挖坑后 signal(mutex) 释放铁锹,signal(full) 通知乙有坑可种。逻辑正确,得1.5分。
乙:在第一次识别中,乙的代码有错误:wait(full) 后 wait(mutex) 正确,但操作后 signal(mutex) 正确,却 signal(full) 错误(应为 signal(empty) 或类似表示坑位释放的信号,以允许甲继续挖坑),且缺少对丙的通知(应 signal(full2))。第二次识别中乙的代码修正为:wait(full)、wait(mutex)、填土、signal(mutex)、signal(full)、signal(full2)。这里 signal(full) 明显错误,因为 full 表示已挖坑未种树,乙种树后应增加可挖坑数(即 signal(empty)),而不是继续 signal(full)。这会导致同步逻辑混乱:乙种树后没有释放坑位资源,甲可能无法继续挖坑;同时乙向 full 发送信号可能导致乙自己重复执行。这是一个逻辑错误,扣1分。但乙正确使用了 mutex 保护铁锹,并正确 signal(full2) 通知丙浇水,这部分正确不扣分。
丙:第一次识别中丙的代码有严重错误:wait(full2) 后浇水,但后面有“3”和 signal(mutex)、signal(full...
登录后发布评论
暂无评论,来抢沙发