文章
103
粉丝
0
获赞
0
访问
3.8k
semaphore empty = 1000;
semaphore full = 0;
semaphore mutex = 1;
semaphore count = 10;
semaphore mutexconsume = 1;
cobegin 生产者{
p(empty)
p(mutex)
生产1
v(mutex)
v(full)
}
coend
cobegin 消费者{
p(mutexconsume) count初值10,mutexconsume保证一个消费者没消费10个前其他消费者不能消费产品
while(count>0){
p(full)
p(mutex)
消费1
v(mutex)
count--;
v(empty)
}
count = 10; count变回10
v(mutexconsum) 允许其他消费者进入消费
}
评分及理由
(1)信号量的初值和含义(满分2分)
得分:2分
理由:学生正确定义了信号量empty、full、mutex、count和mutexconsume,并给出了合理的初值。empty=1000表示初始缓冲区空位为1000,full=0表示初始产品数为0,mutex=1用于互斥访问缓冲区,count=10用于控制消费者连续取10件产品,mutexconsume=1用于保证一个消费者连续取10件产品前其他消费者不能消费。这些定义和初值与题目要求一致。
(2)生产者进程的实现(满分1分)
得分:1分
理由:生产者进程正确地使用了P(empty)和P(mutex)来保证缓冲区未满且互斥访问,然后生产产品并释放互斥锁和增加产品数量(V(mutex)和V(full))。逻辑与标准答案一致。
(3)消费者进程的实现(满分5分)
得分:4分
理由:消费者进程使用了mutexconsume和count来控制连续取10件产品,逻辑基本正确。但存在以下问题:
登录后发布评论
暂无评论,来抢沙发