文章

113

粉丝

0

获赞

6

访问

51.9k

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


评分及理由

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

学生作答整体思路符合生产者-消费者模型,但存在若干逻辑错误和同步关系不完整的问题。具体分析如下:

  • 正确之处:设置了mutex=1用于互斥访问取号机,empty=10full=0用于管理座位资源,符合缓冲区同步的基本结构。
  • 主要错误:
    1. 在顾客进程中,P(service)的位置错误。根据题意,顾客取号后应“等待叫号”,即等待营业员发出叫号信号后才能“获得服务”。学生代码中P(service)在取号后立即执行,且位于V(full)之前,这会导致顾客在进入等待区(即增加full)前就等待服务信号,而营业员的P(full)可能无法获得信号,从而造成死锁或顺序错误。
    2. 营业员进程中,V(service)在“叫号”之后,但“叫号”本身应发生在选择顾客之后,而学生代码中“叫号”与V(service)的顺序可能引起混淆,且未体现叫号与顾客等待的严格对应关系(标准答案中使用每个顾客独立的信号量或一个全局服务信号量来同步)。
    3. 缺少对座位区(缓冲区)的互斥保护。虽然用emptyfull管理数量,但多个顾客同时进入/离开座位区时,对座位数据结构的操作可能需要互斥(标准答案中使用了mutex_seat或类似信号量),但学生代码中仅用mutex保护取号机,未保护座位区。
    4. 信号量service未定义和初始化。学生代码中使用了P(service)V(service),但未在开头声明该信号量及其初值(应为0),这是一个明显的遗漏。
  • 扣分点:
    • 未定义和初始化service信号量:扣1分。
    • 顾客进程中P(service)位置错误导致同步逻辑混乱:扣2分。
    • 缺少座位区的互斥保护:扣1分。
    • 营业员进程中同步顺序不够清晰(但基本框架存在):扣0.5分。
  • 得分计算:满分8分,扣除4.5分,得3.5分。由于分数通常以整数或0.5分计,此处取3.5分。

题目总分:3.5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发