文章

103

粉丝

0

获赞

0

访问

3.8k

头像
2014年计算机学科专业基础综合试题 - 第47题回答
操作系统
发布于2025年6月27日 17:31
阅读数 52

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件产品,逻辑基本正确。但存在以下问题:

  • 在while循环中,count--的操作应在消费产品之后,但学生代码中顺序正确,因此不扣分。
  • 缺少对count的初始化和重置的说明,但代码中已经体现,因此不扣分。
  • 标准答案中使用了mutex1和mutex2分别控制连续取和单次互斥,而学生使用了mutex和mutexco...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发