文章
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表示需要浇水的树苗),且缺少对树坑数量限制的同步信号量(标准答案中的sk)。但empty初值3正确,fe初值1正确,因此扣1分。
(2)甲挖坑过程(满分2分)
得分:1分
理由:甲先wait(empty)(正确,限制坑数),再wait(fe)获取铁锹(正确,互斥),然后挖坑,之后signal(fe)释放铁锹(正确),但signal(k)(表示可埋土)错误,因为乙需要等待的是可使用的树坑(即empty),而不是直接等待k。标准答案中甲应signal(empty)表示增加一个可用树坑。这里逻辑错误,扣1分。
(3)乙放树苗和填土过程(满分2分)
得分:1分
理由:乙先wait(k)(错误,因为k应由甲触发,但甲signal(k)错误,导致这里同步错误),然后wait(fe)获取铁锹(正确),放树苗和填土(正确),之后signal(fe)释放铁锹(正确),但signal(j)(表示可浇水)正确。但乙未释放树坑资源(标准答案中乙应signal(sk)表示可挖坑数增加),这里缺少关键同步,扣1分。
(4)丙浇水过程(满分1分)
得分:1分
理由:丙wait...
登录后发布评论
暂无评论,来抢沙发