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

评分及理由
(1)得分及理由(满分8分)
学生作答得分为:2分。
理由:
- 核心逻辑错误(扣4分):学生的解决方案存在严重逻辑问题。
- 学生使用了单个互斥信号量 `mutex` 来包裹对碗和筷子的申请与释放。这会导致所有哲学家串行化地申请资源,即同一时刻只能有一个哲学家尝试拿碗和筷子,这严重违背了题目“使尽可能多的哲学家同时就餐”的要求,极大地降低了并发度。
- 学生对左右筷子的信号量定义错误。题目中“每两位哲学家之间有一根筷子”,意味着有n根筷子,每根筷子是共享资源。学生的代码中,每个哲学家进程使用独立的 `left` 和 `right` 信号量(且初始化为1),这实际上为每个哲学家分配了“私有”的筷子,没有正确模拟共享筷子的争用,无法防止死锁(在其串行化模型下死锁虽被避免,但模型本身是错误的)。
- 部分正确(给2分):
- 学生正确引入了碗资源(`bowl = m`)的信号量,并对其进行了P/V操作,意识到了碗是有限的资源。
- 代码结构(循环、思考、进餐)和信号量的基本P/V操作语法正确。
- 未扣分项:
- 学生答案中“Semaphore left = right = 1;”可能存在字符识别或书写不规范,但根据上下文可推断其意图是定义两个信号量。根据“禁止扣分”原则,不因此扣分。
- 代码中“进餐”后的释放资源部分再次使用 `P(mutex)` 是错误的,但这属于上述核心逻辑错误的一部分,已在总分中体现,不重复扣分。
综上所述,学生的方案因核心并发模型错误(串行化)和资源(筷子)建模错误,未能正确解决哲学家就餐问题,仅因正确引入了碗资源信号量而获得部分分数。
题目总分:2分
登录后发布评论
暂无评论,来抢沙发