文章

986

粉丝

5

获赞

20

访问

246.4k

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


评分及理由

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

学生答案存在多处逻辑错误和缺失,与标准答案相比,主要问题如下:

  1. 碗的信号量设置错误:第一次识别中,bowl=rand()%n; 将碗的数量设为随机值,这完全不符合题目要求(碗的数量为 m,且需与 n-1 比较取最小值以确保无死锁)。第二次识别中,bowl = n - 1; 虽然限制了数量,但未考虑 m 的限制(即碗的实际数量 m 可能小于 n-1),且未使用信号量 P/V 操作来初始化碗的信号量(标准答案应为 semaphore bowls = min(n-1, m);)。
  2. 缺少对碗的信号量的 P/V 操作同步:第一次识别中完全未使用碗的信号量进行资源控制;第二次识别中虽然加入了 p(bowl)v(bowl),但碗的信号量初始化方式错误(未定义为信号量并赋初值,且未考虑 m)。
  3. 哲学家进程结构不完整:两次识别均未体现哲学家“思考-就餐”的循环过程,且缺少明确的进程定义(如 Process 哲学家i())。第一次识别中 CoBeginCoEnd 位置错误(放在了循环内),第二次识别则完全缺失进程结构。
  4. 筷子信号量使用不完整:第一次识别中缺少对碗的信号量的任何操作;第二次识别中加入了碗的信号量,但初始化错误。
  5. 死锁风险:若碗的信号量未正确限制(如设为 n-1 但 m 可能更小),仍可能导致死锁或资源分配不合理。

综上,学生答案未能正确实现“防止死锁且使尽可能多哲学家同时就餐”的目标,核心逻辑(碗与筷子的同步互斥)存在严重错误。但考虑到部分正确点:使用了筷子信号量数组,并进行了 P/V 操作(尽管未完全正确),且第二次识别中尝试用碗信号量限制并发,给予少量分数。

得分:2分(满分8分)。

题目总分:2分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发