文章
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(empty);
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)通知乙。逻辑正确,与标准答案等效(标准答案用sk控制挖坑上限,mutexT互斥铁锹;学生用empty和fe实现相同功能)。
(3)乙进程(满分2分)
得分:1分
理由:乙wait(k)等待坑就绪,wait(fe)获取铁锹,放树苗并填土后,signal(empty)增加可挖坑数(正确),signal(fe)释放铁锹,signal(j)通知丙。但缺少对水桶的互斥(浇水时水桶是独占资源,但乙未涉及水桶,此处不扣分)。主要错误:乙填土后应释放铁锹,但未考虑乙填土时可能占用铁锹时间较长,但逻辑正确。扣1分是因为乙未处理水桶互斥,但水桶应由丙单独处理,此处实际未错误,但整体信号量设计缺失水桶互斥,影响乙的得分。
(4)丙进程(满分1分)
得分:0分
理由:丙wait(j)后直接浇水,但水桶是独占资源(只有一个),未使用信号量...
登录后发布评论
暂无评论,来抢沙发