文章

95

粉丝

50

获赞

1

访问

12.2k

头像
2011年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年12月1日 15:50
阅读数 51


评分及理由

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

学生答案整体思路正确,将问题建模为生产者-消费者问题,并使用了相应的同步互斥机制。信号量定义基本正确:empty=10表示空座位数,mutex=1用于取号机互斥,full=0表示等待顾客数,service=0用于顾客等待叫号。顾客进程和营业员进程的流程也基本符合要求。

但存在以下逻辑错误:

  1. 在顾客进程中,获得服务后执行了V(empty)。这是错误的,因为顾客离开座位(释放空位)的时机应该在营业员叫号之后、服务之前或服务过程中,而不是在顾客获得服务之后。标准答案中,营业员在叫号前通过P(full); P(mutex); 一位顾客离开座位区; V(mutex); V(empty);来释放座位资源。学生答案中顾客自己释放空位,会导致同步错误(例如,顾客释放空位后,新顾客可能进入,但营业员还未真正开始服务该顾客,座位计数会混乱)。此错误扣2分。
  2. 在顾客进程中,获得服务后有一行V(service)(仅第一次识别结果中出现,第二次识别结果已无此操作)。如果存在,这是多余的,因为service信号量用于顾客等待营业员叫号,应由营业员释放(V(service)),顾客不应释放。但根据第二次识别结果,此错误已不存在,故不扣分。
  3. 学生答案缺少对“座位区”的互斥保护。标准答案中,顾客进入座位区和营业员请顾客离开座位区时,使用了mutex(或另一个互斥信号量)保护座位区数据结构(如队列)。学生答案中mutex仅用于取号机,当多个顾客同时修改座位区计数(如full)或队列时,可能产生竞态条件。此错误扣1分。
  4. 信号量full的注释“有人服务后才有叫号”(第二次识别)表述不准确,应为“有等待顾客时营业员才能叫号”,但此注释不影响代码逻辑,不扣分。

综上,扣除逻辑错误分3分,得分为5分。

题目总分:5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发