文章

281

粉丝

40

获赞

2

访问

23.7k

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

#define MAXSIZE 1000
semaphore mutex = 1;//对环形缓冲区互斥访问
semaphore mutex_batch = 1;//某一进程取走10个数据后,别的进程才能取数据
semaphore empty = MAXSIZE;//还能放入多少个产品
semaphore full = 0;//已经放入了多少个产品
ElemType buffer[MAXSIZE];
int rear = 0;//队尾
int front = 0;//队头

CoBegin{

product_i(){
while(true){
p(empty);
p(mutex);
放入buffer[rear]中一个产品;
v(mutex);
v(full);
rear = (rear+1)% MAXSIZE;
}
}

consumer_i(){
while(true){
p(mutex_batch);
for(int i = 1; i <= 10; i++){
p(full);
p(mutex);
从buffer[rear]中取走一个产品;
v(mutex);
v(empty);
}
v(mutex_batch);
}
}




}CoEnd

评分及理由

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

得分:2分

理由:学生定义了四个信号量,含义和初值都正确。mutex用于缓冲区互斥(初值1),mutex_batch用于控制消费者连续取10件(初值1),empty表示空位数量(初值1000),full表示产品数量(初值0),与标准答案一致。

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

得分:1分

理由:生产者进程正确使用P(empty)和P(mutex)实现同步和互斥,产品放入缓冲区后V(mutex)和V(full)操作正确,rear指针更新位置合理。

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

得分:2分

理由:生产者通过P(empty)/V(full)实现同步,消费者通过P(full)/V(empty)实现同步,同步关系正确。

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

得分:1分

理由:通过mutex_batch信号量确保一个消费者连续取10件产品期间其他消费者无法进入取产品环节...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发