文章

314

粉丝

1

获赞

107

访问

61.5k

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


评分及理由

(1)得分及理由(满分8分)

学生答案得分为2分。

理由:

  1. 核心思路错误:学生试图使用一个互斥信号量(mutex)来一次性检查并获取碗和两根筷子。这种方法虽然可以防止死锁(因为所有资源获取是原子操作),但它严重限制了并发性。在mutex的保护下,同一时刻只能有一位哲学家尝试获取资源,这违背了题目“使尽可能多的哲学家同时就餐”的要求。标准答案通过分别设置碗和筷子的信号量,并利用碗的数量来限制并发哲学家数(不超过n-1),从而在防止死锁的同时最大化并发度。学生的方案极大地降低了并发性能,这是一个严重的逻辑错误,扣4分。
  2. 信号量使用不当:学生将筷子资源定义为整型数组(int chopsticks[n])并在临界区内通过判断其值来模拟资源获取,这不符合题目要求“使用信号量的P、V操作描述”。题目明确要求使用信号量进行同步,而学生仅对mutex使用了信号量操作,对碗和筷子的操作是普通的变量检查和修改,没有体现信号量的同步机制。这是一个关键的错误,扣2分。
  3. 进程逻辑不完整:学生的代码片段只展示了资源获取部分,缺少了哲学家“进餐”和“放回资源”的关键步骤。完整的哲学家进程应该是一个循环,包含思考、获取资源、进餐、释放资源。学生代码在break后直接结束,没有描述进餐和释放资源的过程,逻辑不完整,扣1分。
  4. 细节错误:代码中变量i未定义,且在条件满足后修改了i的值(i = (i + 1) % n;),这会导致进程逻辑混乱。此外,第1次识别结果中在while循环外多了一个v(mutex);。但这些属于细节或可能的识别错误,在主要逻辑错误的大前提下,不再额外扣分。
  5. 部分正确点:学生意识到了需要防止死锁,并且通过互斥访问的方式避免了循环等待,这一点是正确的。因此给予基础分2分。

题目总分:2分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发