文章

163

粉丝

0

获赞

1

访问

37.0k

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


评分及理由

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

学生答案整体思路与标准答案有较大差异,存在多处逻辑错误和信号量使用不当。具体分析如下:

  1. 信号量定义与初值:学生定义了三个信号量:empty(树坑,初值0)、mutex(互斥,初值1)、tool(铁锹,初值1)。标准答案需要四个信号量,分别控制铁锹互斥、可挖坑数(初始为3)、可用坑数(同步)、需浇水数(同步)。学生缺少对“可挖坑数”和“需浇水数”的同步控制,且empty初值应为0(表示初始无可用坑),但学生将其命名为“树坑”且初值0,含义模糊,与标准答案中的empty作用不完全一致(标准答案empty表示可用坑数,由甲生产、乙消费)。
  2. 甲进程逻辑错误:学生使用if(empty < 3)判断,但empty是信号量,不能直接与整数比较,这是语法/逻辑错误。甲应等待“可挖坑数”信号量(标准答案中的sk),而不是判断empty。且甲在挖坑后应增加可用坑数(signal(empty)),但学生代码中signal调用混乱(第一次识别中有明显错误,第二次识别中signal(empty); signal(tool); signal(mutex);顺序虽调整,但缺少对“可挖坑数”的释放(应由乙释放),且多释放了mutex(应在wait后配对的signal,但学生多signal一次)。
  3. 乙进程逻辑错误:乙先wait(mutex),然后放树苗,再wait(empty)和wait(tool)填土。顺序不合理:放树苗不需要互斥?且应先等待有可用坑(wait(empty))再操作。填土后未释放“可挖坑数”信号量(标准答案中signal(sk))和“需浇水”信号量(标准答案中signal(water)),导致丙无法被触发。同时,乙多释放了mutex(可能意图释放互斥锁,但未与wait配对合理)。
  4. 丙进程逻辑错误:丙直接浇水,没有等待任何信号量(如“需浇水”信号量),导致丙无法与乙同步,可能提前浇水或无法触发。
  5. 水桶资源未处理:题目中水桶只有一个,但学生未对水桶进行互斥或同步控制。
  6. 整体同步关系缺失:学生代码未能正确实现“树坑数量小于3时甲才可挖坑”、“乙需等待甲挖坑后才能放树填土”、“丙需等待乙填土后才能浇水”的同步关系,且铁锹互斥使用也不完整(甲和乙都用了tool,但乙中放树苗未用tool?填土用了tool,但放树苗是否需要铁锹?题目中铁锹用于挖坑和填土,放树苗不需要铁锹,但学生乙中wait(tool)在填土前,合理,但甲中挖坑用tool也合理)。但核心问题是缺少对坑数限制和浇水触发的同步。

根据打分要求,逻辑错误扣分:信号量定义不全、同步逻辑错误、资源互斥不完整。学生答案仅部分实现了铁锹互斥,但同步关系几乎全部错误。考虑到题目7分,按比例扣分:信号量定义和初值错误扣2分,甲进程逻辑错误扣2分,乙进程逻辑错误扣2分,丙进程逻辑错误扣1分。剩余0分。但学生答案中mutex和tool信号量初值正确,甲、乙中对tool的wait/si...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发