文章
63
粉丝
0
获赞
0
访问
13.4k
semaphore mutex = 1; // 对铁锹的使用需要互斥
semaphore pits = 3; // 甲还能挖洞的数量
sempahore empty = 0; // 可以使用的树坑数量
sempahore water = 0; // 需要浇水的水苗数量
甲() {
while (1) {
wait(pits); // 最多只能挖三个未被乙使用的坑
wait(mutex); // 占用铁锹
挖树坑;
signal(mutex); // 释放铁锹
V(empty); // 通知乙可以放树苗和填土了
}
}
乙() {
while (1) {
wait(empty); // 等待到有树坑为止
wait(mutex); // 占用铁锹
放树苗、填土;
signal(mutex); // 释放铁锹
signal(pits); // 通知甲可以继续挖坑了
signal(waiter); // 通知丙可以浇水了
}
}
丙() {
while (1) {
wait(water);
浇水;
}
}
评分及理由
(1)信号量定义得分及理由(满分2分)
得分:1分
理由:学生定义了4个信号量,与标准答案一致,功能正确。但存在两个拼写错误:sempahore 应改为 semaphore,waiter 应改为 water。由于信号量功能定义正确,扣1分。
(2)甲进程代码得分及理由(满分2分)
得分:2分
理由:甲进程逻辑完全正确,通过wait(pits)控制挖坑数量不超过3,使用mutex正确保护铁锹资源,signal(empty)通知乙进程,与标准答案一致。
(3)乙进程代码得分及理由(满分2分)
得分:1分
理由:乙进程整体逻辑正确,但存在一个拼写错误:signal(waiter) 应改为 signal(water)。由于这是明显的拼写错误但逻辑正确,扣1分。
(4...
登录后发布评论
暂无评论,来抢沙发