文章
281
粉丝
40
获赞
2
访问
23.7k
#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件产品期间其他消费者无法进入取产品环节...
登录后发布评论
暂无评论,来抢沙发