文章
359
粉丝
0
获赞
2
访问
33.4k
Semaphore mutex=1//甲乙对铁锹的互斥访问
pits=3//只有树坑小于3的时候甲才用挖坑
empty=0//满足种树的树坑数量
water=0//对树进行浇水
甲(){
while(1)
p(mutex)
p(pits)
挖树坑
v(mutex)
v(empty)
}
乙(){
p(empty)
放树苗
v(fits)
p(mutex)
填土
v(mutex)
v(water)
}
丙(){
p(water)
浇水
}
评分及理由
(1)信号量定义得分及理由(满分2分)
得分:2分
理由:学生定义了4个信号量,与标准答案一致。mutex用于铁锹互斥访问,pits对应可挖树坑数量,empty对应可使用的树坑数量,water对应需要浇水的树苗。信号量初值设置正确,命名合理。
(2)甲进程代码得分及理由(满分2分)
得分:1分
理由:学生代码中甲进程先获取铁锹互斥锁再获取树坑信号量,这个顺序与标准答案相反。正确的顺序应该是先检查是否有可挖树坑(pits),再获取铁锹资源(mutex)。虽然这个顺序问题在逻辑上可能不会导致死锁,但不符合资源获取的常规顺序,存在逻辑瑕疵。
(3)乙进程代码得分及理由(满分2分)
得分:1分
理由:乙进程代码存在两个问题:第一,填土操作应该在获取铁锹互斥锁之后进行,但学生将p(mutex)放在了填土操作之前,而放树苗操作没有使用铁锹却放在了p(mutex)之前;第二,信号量名称写错,v(fits)应该是v(pits)。此外,填土操作应该与放树苗一起在铁锹保护下完成。
(4)丙进程代码得分及理由(满分1分)
得分:1分
理由:丙进程代码完全正确,等待浇水信号后执行浇水操作。
题目总分:2+1+1+1=5分
登录后发布评论
暂无评论,来抢沙发