文章
19
粉丝
0
获赞
0
访问
595
// 初始化信号量
semaphore empty_buckets = 3; // 空桶数
semaphore full_buckets = 0; // 满桶数
semaphore water_in_cup = 0; // 水缸内水量(0~10)
semaphore mutex_buckets = 1; // 互斥
// 小和尚(提水)
procedure 小和尚提水() {
while (true) {
P(empty_buckets); // 等待空桶
P(mutex_buckets); // 保护变量
if (water_in_cup < 10) {
water_in_cup += 1; // 增加水
V(full_buckets); // 满桶数增加
} else {
// 水缸已满,不能再提水,等到有空桶
// 这里可以考虑等待后再继续
V(mutex_buckets);
V(empty_buckets);
continue; // 重新等待
}
V(mutex_buckets);
}
}
// 老和尚(取水)
procedure 老和尚取水() {
while (true) {
P(full_buckets); // 等待有满桶
P(mutex_buckets); // 保护变量
// 取走一桶水
water_in_cup -= 1;
V(empty_buckets); // 空桶加一
V(mutex_buckets);
// 老和尚喝水
}
}
评分及理由
(1)得分及理由(满分8分)
学生答案中存在以下问题:
登录后发布评论
暂无评论,来抢沙发