文章
397
粉丝
40
获赞
2
访问
88.2k
coBegin{
semaphore mutex_k = 3;//还剩可以挖几个坑
semaphore mutex_t = 1;//铁锹
semaphore a_done = 0;//有多少个坑需要填土
semaphore b_done = 0;//有多少颗树需要浇水
p_1(){
while(1){
wait(mutex_k);
wait(mutex_t);
挖坑;
signal(mutex_t)
signal(a_done);
}
}
p_2(){
while(1){
wait(a_done);
wait(mutex_t);
放入树苗;
填土;
signal(mutex_t);
signal(mutex_k)
signal(b_done);
}
}
p_3(){
while(1){
wait(b_done);
浇水;
}
}
}CoEnd
评分及理由
(1)信号量定义及初值(满分2分)
得分:2分
理由:学生定义了四个信号量:mutex_k(初值3,表示可挖坑数量)、mutex_t(初值1,表示铁锹互斥)、a_done(初值0,表示需要填土的坑数)、b_done(初值0,表示需要浇水的树数)。这些信号量的作用和初值与标准答案一致(mutex_k对应sk,mutex_t对应mutexT,a_done对应empty,b_done对应water)。定义正确且完整。
(2)甲(p_1)的同步互斥操作(满分2分)
得分:2分
理由:甲先wait(mutex_k)检查可挖坑数,再wait(mutex_t)获取铁锹,挖坑后释放铁锹并signal(a_done)通知乙。逻辑与标准答案完全一致,无错误。
(3)乙(p_2)的同步互斥操作(满分2分)
得分:2分
理由:乙先wait(a_done)等待有坑需填土,再wait(mutex_t)获取铁锹,执行放树苗和填土后释放铁锹,然后signal(mutex_k)增加可挖坑数(对应标准答案的signal(sk)),并signal(b_done)通知丙浇水。逻辑正确,与标准答案等效。
(4)丙(p_3)的同步互斥操作(满分1分)
得分:1分
理由:丙等待b_done信号后浇水,无需互斥操作(...
登录后发布评论
暂无评论,来抢沙发