文章
203
粉丝
40
获赞
1
访问
11.5k
semaphore empty = 0; //需要填土的坑
semaphore water = 0;// 需要浇水
semaphore full = 3; //可挖的树坑数量
semaphore fe = 1; //铁锹
cobegin{
P_A(){
while(1){
p(full);
p(fe);
甲挖坑;
v(fe);
v(empty);
}
}
P_B(){
while(1){
p(empty);
p(fe);
乙放树苗;
乙埋土;
v(full);
v(fe);
v(water);
}
}
P_C(){
while(1){
p(water);
丙拿桶浇水;
}
}
}coend
评分及理由
(1)信号量定义及初值(满分2分)
得分:2分。理由:学生定义了四个信号量:empty(初值0,表示需要填土的坑)、water(初值0,表示需要浇水)、full(初值3,表示可挖的树坑数量,正确反映了“树坑数量小于3时甲才可以挖坑”的约束)、fe(初值1,表示铁锹互斥)。信号量定义与标准答案等效(full对应sk,fe对应mutexT),且初值设置正确,符合题目要求。
(2)甲(挖坑)进程同步逻辑(满分2分)
得分:2分。理由:甲先wait(full)检查可挖坑数量,再wait(fe)获取铁锹,挖坑后释放铁锹signal(fe),并signal(empty)通知乙有坑可用。逻辑与标准答案一致,且满足互斥和同步条件。
(3)乙(放树苗和填土)进程同步逻辑(满分2分)
得分:2分。理由:乙先wait(empty)等待有坑可用,再wait(fe)获取铁锹(填土需用铁锹),执行放树苗和填土操作后,signal(full)增加可挖坑数量(相当于释放一个坑位),signal(fe)释放铁锹,signal(water)通知丙浇水。逻辑正确,且注意了铁锹的互斥使用。
(4)丙(浇水)进程同步逻辑(满分1分)
得分:1分。理由:丙wait(water)等待浇水信号,然后浇水。水桶只有一个但无需互斥信号量(因为浇水时水桶独占,且题目未要求互斥),学生未定义水桶信号量是...
登录后发布评论
暂无评论,来抢沙发