文章

103

粉丝

0

获赞

0

访问

3.8k

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

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的含义和初值均符合题目要求。

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

得分:1分

理由:生产者进程的互斥和同步操作正确,使用了empty和full信号量控制缓冲区空位和产品数量,mutex信号量保证互斥访问缓冲区。

(3)消费者进程的实现(满分5分)

得分:4分

理由:消费者进程的实现基本正确,使用了mutexconsume信号量保证一个消费者连续取10件产品,其他消费者不能取产品。但存在以下逻辑错误:

  • count信号量的使用不正确,count应该是一个计数器,而不是信号量。题目中要求的是连续取10件产品,而不是限制缓冲区至少有10件产品才能开始取。
  • while(count>0)循环中,count--的操作应该在消费产品之后,但代码中顺序正确,不影响整体逻辑。

因此扣1分。

题目总分:2+1+4=7分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发