文章
281
粉丝
40
获赞
2
访问
23.8k
#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]中一个产品;
rear = (rear+1)% MAXSIZE;
v(mutex);
v(full);
}
}
consumer_i(){
while(true){
p(mutex_batch);
for(int i = 1; i <= 10; i++){
p(full);
p(mutex);
从buffer[front]中取走一个产品;
front = (front+1) % MAXSIZE;
v(mutex);
v(empty);
}
v(mutex_batch);
}
}
}CoEnd
评分及理由
(1)信号量定义得分及理由(满分2分)
得分:2分
理由:学生定义了四个信号量,含义和初值都正确。mutex用于缓冲区互斥(初值1),mutex_batch用于控制消费者连续取10件产品(初值1),empty表示空位数量(初值1000),full表示产品数量(初值0),与题目要求完全一致。
(2)生产者进程实现得分及理由(满分3分)
得分:3分
理由:生产者进程实现正确。先P(empty)检查空位,再P(mutex)互斥访问缓冲区,放入产品后V(mutex)释放锁,最后V(full)增加产品计数。顺序正确,实现了同步和互斥。
(3)消费者进程实现得分及理由(满分3分)
得分:3分
理由:消费者进程实现正确。通过P(mutex_batch)确保一个消费者连续取10件产品,在循环内先P(full)检查产品,再P(mutex)互斥访问,取产品后V...
登录后发布评论
暂无评论,来抢沙发