文章
203
粉丝
40
获赞
1
访问
11.5k
semaphore k = 0; //可以埋土
semaphore j = 0;// 可以浇水
semaphore empty = 3; //可挖的树坑数量
semaphore fe = 1; //铁锹
cobegin{
P_A(){
while(1){
p(emoty);
p(fe);
甲挖坑;
v(fe);
v(k);
}
}
P_B(){
while(1){
p(k);
p(fe);
乙放树苗;
乙埋土;
v(fe);
v(j);
}
}
P_C(){
while(1){
p(j);
丙拿桶浇水;
}
}
}coend
评分及理由
(1)信号量定义及初值(满分2分)
得分:1分
理由:学生定义了4个信号量:k(可以埋土,初值0)、j(可以浇水,初值0)、empty(可挖树坑数量,初值3)、fe(铁锹互斥,初值1)。其中empty和fe的初值正确,但k和j的命名和含义不够清晰(标准答案中对应empty和water),且缺少对水桶的互斥访问(浇水时水桶是共享资源,但学生未定义相关信号量)。扣1分。
(2)甲挖坑过程(满分2分)
得分:2分
理由:甲先wait(empty)检查可挖坑数量,再wait(fe)获取铁锹,挖坑后释放铁锹并signal(k)(对应标准答案中的signal(empty)),逻辑正确。虽然信号量命名不同,但思路正确,不扣分。
(3)乙放树苗和填土过程(满分2分)
得分:1分
理由:乙先wait(k)(对应等待可用的树坑),再wait(fe)获取铁锹,执行放树苗和填土后释放铁锹并signal(j)(通知浇水)。但缺少signal(empty)(或类似操作)来增加可挖坑数量(标准答案中乙执行后signal(sk)),这会导致甲最多只能挖3个坑后无法继续,因为empty没有被重置。逻辑错误扣1分。
(4)丙浇水过程(满分1分)
得分:0分
理由:丙等待wait(j)后浇水,但浇水需要使用水桶,而水桶是共享资源(只有1个),学生未定义任何信号量来保证互斥访问(如标准答案中的mutexT用于铁锹,但水桶也需要类似互斥机制)。这里存在逻辑错误:丙浇水时可能与其他进程...
登录后发布评论
暂无评论,来抢沙发