2019年(408)计算机学科专业基础综合试题 - 第43题回答
操作系统
发布于2026年5月1日 17:56
阅读数 30

评分及理由
(1)得分及理由(满分8分)
得分:2分
理由:
学生作答存在以下逻辑错误:
- 错误1:碗的信号量初始化错误。标准答案中碗的信号量初值应为 min(m, n-1),以限制同时就餐人数防止死锁,而学生直接初始化为 m,忽略了 n-1 的限制,可能导致当 m > n-1 时超过实际安全并发数,存在死锁风险。
- 错误2:哲学家取筷子的顺序逻辑错误。学生使用了 if (i / 2 == 0) 的奇偶判断,但标准答案并未使用此方法。更关键的是,在 if 分支中,哲学家先取右边筷子((i+1)%n)后取左边筷子(i),且中间出现了重复的“进餐;”和“V(A[(i+1)%n]);”操作,导致逻辑混乱、资源释放不当。例如:先 P(A[(i+1)%n]) 进餐一次,再 P(A[i]) 又进餐一次,且 V(A[(i+1)%n]) 被重复执行,破坏了互斥与同步规则。
- 错误3:进餐操作重复且位置错误。在 if 分支中,两次调用了“进餐;”,且第一次进餐时只持有右边筷子,未持有左边筷子和碗(虽然 P(bow) 在先,但之后应等待筷子全到才能进餐),违反“必须取到碗和两侧筷子才能就餐”的要求。
- 正确部分:学生正确使用了信号量机制,定义了碗和筷子的信号量,并进行了 P/V 操作的基本设置,且整体思路试图解决哲学家就餐问题。因此获得部分分数。
题目总分:2分
登录后发布评论
暂无评论,来抢沙发