2019年(408)计算机学科专业基础综合试题 - 第43题回答
操作系统
发布于2025年12月6日 16:39
阅读数 113

评分及理由
(1)得分及理由(满分8分)
学生答案得分为2分。
理由:
- 核心思路错误:学生试图使用一个互斥信号量(mutex)来保护所有资源的检查与分配,这会导致任何时候只能有一位哲学家尝试拿取资源(碗和筷子),严重限制了并发性,与题目要求的“使尽可能多的哲学家同时就餐”相违背。标准答案使用独立的碗信号量(bowls)和筷子信号量数组(chopsticks),允许多个哲学家并发地尝试获取资源。
- 未正确处理碗资源的限制:学生的代码中,碗资源(wan)只是一个普通的整型变量,没有用信号量保护其PV操作。虽然它在mutex保护下进行判断和递减,但这使得碗资源的管理与筷子资源完全耦合,且没有体现出碗资源作为独立并发控制信号量的作用。标准答案中,碗信号量(bowls)的初值设置为min(m, n-1),这是防止死锁和最大化并发的关键。
- 筷子资源表示错误:学生将筷子资源定义为整型数组(int chopsticks[n]),但在使用中却将其当作信号量来检查(如 == 1)和递减。正确的做法应该是定义为一个信号量数组,每个信号量初值为1,通过P/V操作来申请和释放。学生的代码中缺少对筷子的P操作,直接进行减1操作,这不是标准的信号量同步机制。
- 进程逻辑不完整且存在错误:学生的进程函数中,在成功获取资源后,有一个 `i = (i + 1) % n;` 的语句,这修改了哲学家的索引,逻辑上不合理。并且,获取资源后直接break跳出循环,然后“哲学家开始进餐”的注释在循环外,但代码结构混乱,进餐和释放资源的步骤缺失或位置错误。标准答案是一个清晰的循环,包含思考、取资源、进餐、放回资源。
- 给分点:学生答案中正确识别了需要碗和左右两根筷子(共三种资源),并且使用了互斥的思想来防止竞态条件。鉴于其基本理解了问题涉及多种资源,但解决方案存在上述根本性逻辑错误,无法正确实现同步与防止死锁,因此给予少量分数。
题目总分:2分
登录后发布评论
暂无评论,来抢沙发