文章

164

粉丝

0

获赞

1

访问

91.7k

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

Semaphore full=1000;//表示产品总数

Semaphore empty=0;//表示空位置

Semaphore mutex;//取产品时锁缓冲区

消费者进程

cobegin

{

p(mutex);//准备取产品

for(int i=0;i<10;i++)

{p(full);

取产品;

v(empty);
}

v(mutex);

}

生产者进程

p(empty);

生产产品;

v(full);


评分及理由

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

得分:1分

理由:学生定义了full、empty和mutex三个信号量,但存在以下问题: - full初值1000正确(表示缓冲区容量),empty初值0正确(初始空位为0) - 但缺少控制消费者连续取10件的互斥信号量(对应标准答案的mutex1) - mutex信号量未给出初值(应设为1) - 信号量含义说明不完整

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

得分:1分

理由:生产者进程存在严重逻辑错误: - 缺少对缓冲区的互斥访问(没有P(mutex)和V(mutex)) - P(empty)和V(full)顺序正确,但缺少互斥保护 - 生产产品操作应放在P(empty)之前

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

得分:1分

理由:消费者进程存在多个逻辑错误: - P(mutex)位置错误,应该在循环内部对每次取产品进行互斥保护 - 缺少控制连续取10件的机制(没有类似mutex1的信号量) - 虽然用for循环实现了连续取10件,但没有保证其他消费者在此期间不能取产品 - 缺少消费产品的操作

题目总分:1+1+1=3分

总体评价:学生理解了基本的生产者-消费者模型,但未能正确处理题目要求的"一个消费者连续取10件产品期间其他消费者不能取产品"这一特殊条件,同时在互斥保护和操作顺序上存在多处逻辑错误。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发