文章

371

粉丝

21

获赞

1

访问

29.3k

头像
2019年(408)计算机学科专业基础综合试题 - 第43题回答
操作系统
发布于2025年11月14日 21:24
阅读数 22


评分及理由

(1)信号量定义部分得分及理由(满分2分)

学生定义了两个信号量:`eat` 和 `stock[n]`,其中 `stock[n]` 表示筷子资源,初值为1,正确(1分)。但 `eat` 信号量的初值设置为 `max(m, n-1)`,而标准答案应为 `min(m, n-1)`,因为碗的数量和最多允许进餐的哲学家数量(n-1)中较小的那个才是实际限制。此处逻辑错误,扣1分。本部分得分:1分。

(2)哲学家进程同步逻辑得分及理由(满分6分)

学生代码中,哲学家进程先申请 `eat` 信号量(代表允许进餐的名额),然后依次申请左右筷子,进餐后释放筷子和 `eat` 信号量。这个顺序正确,避免了死锁,因为通过 `eat` 信号量限制了同时进餐的哲学家数量(尽管初值有误,但逻辑结构正确)(4分)。但是,学生代码中在进餐后释放 `eat` 信号量,然后释放筷子,顺序合理(1分)。然而,学生代码中缺少对碗的明确管理,题目要求必须取到碗和筷子才能进餐,但学生代码中仅通过 `eat` 信号量隐含了碗的限制,没有单独对碗进行P/V操作,但根据题目“碗和筷子放回原位”的要求,标准答案也是用同一个信号量代表碗和进餐名额,因此此处不扣分。但学生代码中进餐步骤描述为“拿碗筷和两侧筷子进食”,语义不够清晰,但整体逻辑正确,不扣分。本部分得分:5分。

题目总分:1+5=6分

主要扣分点在于 `eat` 信号量初值设置错误,导致可能同时进餐的哲学家数量超过防止死锁的限制(应为 min(m,n-1) 而非 max(m,n-1)),其他部分逻辑正确。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发