评分及理由
(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分
登录后发布评论
暂无评论,来抢沙发