文章

64

粉丝

1

获赞

0

访问

7.1k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第45题回答
操作系统
发布于2025年8月19日 18:37
阅读数 89

(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分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发