文章

480

粉丝

0

获赞

1

访问

65.2k

头像
2014年(408)计算机学科专业基础综合试题 - 第47题回答
操作系统
发布于2025年12月10日 23:13
阅读数 22


评分及理由

(1)信号量含义和初值(满分2分)

得分:2分

理由:学生答案中定义了四个信号量:empty=1000(缓冲区空位),full=0(产品数),mutex1=1,mutex2=1。其含义与标准答案一致,初值也正确。因此得满分。

(2)生产者进程实现(满分1分)

得分:0.5分

理由:生产者进程中,先P(empty)再“生产”,这个顺序与常规“先生产,再申请空位”的逻辑不符,存在潜在风险(如果empty为0,生产者会阻塞在P(empty)上,但此时产品可能已经生产出来,造成浪费)。标准答案和更合理的做法是先生产,再申请空位。因此扣0.5分。但P(mutex1)保护放入缓冲区、V(full)的操作顺序是正确的。

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

得分:2分

理由:生产者使用P(empty)和V(full),消费者使用P(full)和V(empty),这两个信号量正确地实现了缓冲区空满的同步。因此得满分。

(4)消费者之间互斥操作(满分1分)

得分:0分

理由:题目要求“一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品”。学生答案中使用mutex2包裹了整个for循环,这确实能保证一个消费者连续取10件的过程中,其他消费者无法进入其临界区。但是,消费者在取产品时,缺少了对缓冲区的互斥访问(即缺少类似P(mutex1)和V(mutex1)的操作来保护“取产品”这一动作)。这使得多个生产者/消费者可能同时操作缓冲区指针,导致数据不一致。这是一个严重的逻辑错误,因此本项不得分。

(5)控制消费者连续取产品数量(满分2分)

得分:2分

理由:学生答案通过P(mutex2)和V(mutex2)将for(int i=0; i<10; i++)循环包裹起来,有效地实现了一个消费者连续取10件产品期间独占访问权的逻辑,符合题目附加要求。因此得满分。

题目总分:2+0.5+2+0+2=6.5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发