文章
125
粉丝
0
获赞
1
访问
21.5k
semaphore emptyA=2; //A 型产品可用空位
semaphore emptyB=2; //B 型产品可用空位
semaphore fullA=0; //A 型产品数量
semaphore fullB=0; //B 型产品数量
semaphore mutex=1; //缓冲区互斥锁
cobegin(){
进程P1(){
for(int i=0;i<3;i++){
生产A产品;
P(emptyA);
P(mutex);
把A产品放入缓冲区;
V(mutex);
V(fullA);
}
}
进程P2(){
for(int i=0;i<3;i++){
生产B产品;
P(emptyB);
P(mutex);
把B产品放入缓冲区;
V(mutex);
V(fullB);
}
}
进程C1(){
for(int i=0;i<3;i++){
P(fullA);
P(mutex);
把A产品从缓冲区取走;
V(mutex);
V(emptyA);
消费A产品
}
}
进程C2(){
for(int i=0;i<3;i++){
P(fullB);
P(mutex);
把B产品从缓冲区取走;
V(mutex);
V(emptyB);
消费B产品
}
}
}
(2)(2+1+2+1)*3=18
评分及理由
(1)得分及理由(满分5分)
得分:5分
理由:学生的伪代码完全符合标准答案的要求,正确地使用了信号量机制实现了生产者和消费者之间的同步与互斥。每个进程的操作顺序(P操作、临界区操作、V操作)正确,且对不同类型的产品的生产和消费进行了正确的限制。代码逻辑清晰,无任何错误。
(2)得分及理由(满分2分)
得分:2分
理由:学生的计算过程虽然简洁,但结果与标准答案一致,总耗时为18个时间单位。计算逻辑正确,符合题目要求。
题目总分:5+2=7分
登录后发布评论
暂无评论,来抢沙发