文章

52

粉丝

0

获赞

0

访问

4.4k

头像
2014年计算机学科专业基础综合试题 - 第47题回答
操作系统
发布于2025年9月23日 19:42
阅读数 74


评分及理由

(1)信号量定义得分及理由(满分2分)

得分:1分

理由:学生定义了三个信号量:full(初值0,含义正确)、empty(初值1000,含义正确)、mutex(初值1,含义正确)。这三个信号量是经典生产者-消费者问题的标准设置,但题目要求"一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品",这需要额外的互斥机制来保证。学生缺少控制消费者连续取产品的信号量(如标准答案中的mutex1),因此扣1分。

(2)生产者进程实现得分及理由(满分1分)

得分:1分

理由:生产者进程的实现完全正确。先P(empty)检查缓冲区空间,再P(mutex)互斥访问缓冲区,放入产品后V(mutex)释放互斥锁,最后V(full)增加产品计数。逻辑与标准答案一致。

(3)生产者与消费者同步操作得分及理由(满分2分)

得分:2分

理由:生产者使用P(empty)/V(full),消费者使用P(full)/V(empty),同步逻辑正确,实现了缓冲区空满状态的正确管理。

(4)消费者进程实现得分及理由(满分3分)

得分:0分

理由:消费者进程存在严重逻辑错误:

  • 错误1:在for循环外部只进行了一次P(full)操作,但循环内要取10件产品。如果缓冲区产品不足10件,会导致消费者在第一次P(full)成功后,后续循环中执行P(full)时可能因产品不足而阻塞,但此时mutex锁未被释放,造成死锁。
  • 错误2:连续取10件产品的互斥控制缺失。题目要求一个消费者连续取10件期间其他消费者不能取,但学生的实现中,mutex锁在循环结束后才释放,这虽然保证了10次操作的原子性,但会导致在此期间生产者和消费者完全阻塞,不符合题目"其他消费者进程才可以取产品"的要求(应只阻塞其他消费者,不阻塞生产者)。标准答案使用mutex1控制消费者周期,mutex2控制单次访问是正确的做法。
  • 错误3:V(empty)操作在循环内部,但P(full)只在循环外部一次,同步操作不匹配。

题目总分:1+1+2+0=4分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发