文章
64
粉丝
1
获赞
0
访问
7.1k
(1).
p1(){
while(1){
P(emptyA);
生产A;
P(mutex);
将A产品放入缓冲区;
V(mutex);
V(fullA);
}
}
p2(){
while(1){
P(emptyB);
生产B;
P(mutex);
将B产品放入缓冲区;
V(mutex);
V(fullB);
}
}
C1(){
while(1){
P(fullA);
P(mutex);
消费A;
V(mutex);
V(emptyA);
}
}
C2(){
while(1){
P(fullB);
P(mutex);
消费B;
V(mutex);
V(emptyB);
}
}
(2).总耗时为15个时间单位
评分及理由
(1)得分及理由(满分5分)
学生答案中,P1和P2进程的代码存在逻辑错误:生产操作应在P(emptyA)或P(emptyB)之前进行,因为生产产品需要时间,且空位信号量用于控制缓冲区空位,生产完成后才能申请空位。学生代码将生产操作放在P(emptyA)之后,这会导致在没有空位时也可能先生产,违反同步规则。C1和C2进程的代码也存在逻辑错误:消费操作应在从缓冲区取出产品之后进行,但学生代码将消费操作放在临界区内(P(mutex)和V(mutex)之间),这会导致消费时间占用互斥锁,降低并发度,且不符合标准答案的同步逻辑(标准答案中消费在释放互斥锁后进行)。此外,所有进程缺少循环次数控制(应各生产/消费3次),但题目要求伪代码,可忽略循环细节。扣分:P1和P2错误各扣1分,C1和C2错误各扣1分,共扣4分。得分:1分。
(2)得分及理由(满分2分)
学生答案计算总耗时为15时间单位,但标准答案为18时间单位。计算错误原因可能源于同步代码逻辑错误导致的调度分析偏差,例如错误的生产/消费顺序或时间计算。由于学生代码逻辑错误,其耗时计算不可信。扣分:完全错误,扣2分。得分:0分。
题目总分:1+0=1分
登录后发布评论
暂无评论,来抢沙发