文章

309

粉丝

0

获赞

1

访问

156.7k

头像
2011年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2026年8月23日 23:13
阅读数 104


评分及理由

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

该学生的答案存在以下问题:

  • 信号量含义不清:mutex2被定义为“顾客与营业员之间的互斥信号量”,但实际上营业员与顾客之间是同步关系(叫号后顾客才能获得服务),而不是互斥关系。虽然标准答案中也有一个service信号量用于同步,但学生错误地将这个同步信号量命名为互斥信号量,概念上不准确,但代码逻辑上实现了同步(P(mutex2)等待,V(mutex2)唤醒)。
  • 缺少座位区互斥保护:标准答案中,顾客进入座位区和营业员让顾客离开座位区时,需要使用mutex保护座位区的操作,以保证座位区数据的完整性。学生的答案中没有对座位区进行互斥保护,虽然本题目中座位区只是虚拟的等待区,不涉及具体数据修改,但严格来说缺少了必要的互斥。
  • 缺少顾客i特定信号量:标准答案中使用了service_i信号量实现“叫号”与“等待叫号”的同步,学生用mutex2实现类似功能,但mutex2没有区分不同顾客,可能导致多个顾客共用一个信号量,在并发场景下会出现问题(如当一个顾客被唤醒时,其他顾客也可能被唤醒)。不过由于每个顾客的进程是独立的,且营业员每次只服务一个顾客,在严格意义上如果只有一个顾客在等待时能正确工作,但多个顾客时逻辑不正确。
  • 叫号与服务的顺序问题:学生的营业员进程先V(empty)再叫号,标准答案中是先叫号再服务,顺序不影响正确性。但学生没有在叫号前获取顾客的服务信号量并进行V操作,而是直接使用V(mutex2)唤醒所有等待的顾客,逻辑不正确。

综合来看,学生的答案核心框架正确(使用了生产者消费者模型,正确使用了empty、full信号量),但缺少座位区互斥,且mutex2的使用存在问题,不能正确实现“叫号”与“等待叫号”的同步,存在逻辑错误。因此,只能给部分分数。

得分:4分(思路正确,但关键同步逻辑有误,扣4分)

题目总分:4分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发