文章

109

粉丝

0

获赞

0

访问

22.8k

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


评分及理由

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

该作答存在多处关键逻辑错误,具体如下:

① 信号量含义解释不清且不完整:mutex 被描述为“控制叫号机的访问”,但代码中 mutex 仅保护“取号”操作,因此含义应为“取号机互斥信号量”。seats 含义为座位数(正确),nums 被解释为“已取票数量”(概念模糊,实际应为等待顾客数或可服务信号量),service 为服务信号量(正确)。信号量初值基本正确(mutex=1,seats=10,nums=0,service=0)。

② 顾客进程逻辑错误:顾客在 P(seats) 后取号,但缺少“进入座位区”的互斥保护(标准答案中用 mutex 保护该操作)。更重要的是,顾客在 V(nums) 后执行“等待”,然后 P(service),此逻辑错误——顾客应在取号后立即进入等待区(等待叫号),而代码中“等待”位置含糊,且顾客在 P(service) 之前没有明确表示已就座。顾客进程最后 V(seats) 位置错误:释放座位应在服务完成后才进行,但该作答将位置在“获取服务”之后紧接执行,而实际上服务仍需营业员执行“服务”操作,时序不明确。此外,顾客进程缺少 while(TRUE) 循环,但题目中顾客 i 只来一次,此点不扣分。

③ 营业员进程逻辑严重错误:营业员执行 P(nums) 后立刻“叫号”、“V(service)”,然后“服务”,但缺少对座位区的操作(顾客离开座位、释放座位等),导致座位不会正确释放。更重要的是,营业员进程没有 while(TRUE) 死循环,无法持续服务多个顾客,这与题目要求不符(题中营业员需循环服务)。此错误直接影响同步的正确性。

④ 同步错误:营业员在“叫号”之前未确保顾客已就座(应等待顾客 P(nums) 后且已进入座位),且叫号后应针对具体顾客唤醒,而使用了单一 service 信号量,在多个顾客并发时会产生错误唤醒(如唤醒错误顾客或导致多个顾客同时被唤醒),逻辑不正确。

综上,该作答核心逻辑(生产者-消费者模型、缓冲区管理)不清晰,互斥与同步控制存在多处错误,不能正确实现题目要求的功能。

题目总分:2分

得分说明:信号量定义初值基本正确(可给1分),取号机互斥部分基本合理(可给1分),但其他核心同步逻辑错误,故总分2分。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发