文章
41
粉丝
61
获赞
0
访问
951

评分及理由
(1)信号量定义及初值(满分约2分)
学生定义了四个信号量:mutex1(初值1)、mutex2(初值1)、full(初值3)、empty(初值0)。其中,mutex1 用于互斥使用铁锹,正确;full 初值3 对应“树坑数量小于3时才可以挖”,相当于标准答案的 sk,正确;empty 初值0 表示可使用的树坑数量,正确。但 mutex2 用于互斥浇水,而题目中水桶只有一个,浇水也需要互斥,所以 mutex2 的设置是合理的(虽然标准答案未显式给出,但逻辑正确)。然而,学生缺少了类似标准答案中 water 的信号量来同步乙和丙(即填土后通知浇水),这是一个关键缺失。此外,学生将控制挖坑条件的信号量命名为 full,而标准答案为 sk,名称不同但不影响逻辑,不扣分。但缺少 water 信号量会导致乙和丙之间没有同步关系,属于逻辑错误。扣1分。
得分:1分
(2)甲进程的同步互斥逻辑(满分约2分)
甲进程中使用了 while (empty < 3) 作为循环条件,但 empty 是信号量,不能直接与整数比较,这是一个严重的逻辑错误(应使用 P(full) 或类似方式等待条件)。实际上,学生没有在挖坑前对 full 进行 P 操作,而是试图用 empty 的值来判断,这会导致同步错误(甲可能一直挖坑,不受树坑数量限制)。另外,甲在挖坑前后对 mutex1 的 P/V 操作正确,保护了铁锹互斥。但由于同步条件实现错误,扣1.5分。
得分:0.5分
(3)乙和丙进程的同步互斥逻辑(满分约3分)
乙进程中:P(empty) 正确,表示等待有坑可用;P(mutex1) 获取铁锹进行填土,正确;填土后 V(mutex1) 释放铁锹,正确。但是,乙没有在填土后增加可挖坑数量(即没有 V(full)),也没有通知丙浇水(即没有 V(water)),导致后续挖坑和浇水无法进行。此外,乙进程中直接写了“浇水”,但浇水是丙的工作,这里属于逻辑混乱(可能识别错误)。丙进程中:使用 P(mutex2) 和 V(mutex2) 保护浇水互斥,正确,但丙没有等待乙的通知(即没有 P(water)),导致丙可能无法正确执行浇水。整体上,乙和丙之间的同步缺失,且乙缺少 V(full),扣2分。
得分:1分
题目总分:1+0.5+1=2.5分
登录后发布评论
暂无评论,来抢沙发