文章

121

粉丝

195

获赞

0

访问

15.8k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第45题回答
操作系统
发布于2025年11月21日 17:47
阅读数 14

1)

P1(){
  while(1){
    P(emptyA);        // 等A空位
    P(mutex);         // 进临界区
    放一个A到缓冲区;
    V(mutex);
    V(fullA);
    生产时间 2 单位;
  }
}
P2(){
  while(1){
    P(emptyB);        // 等B空位
    P(mutex);         // 进临界区
    放一个B到缓冲区;
    V(mutex);
    V(fullB);
    生产时间 2 单位;
  }
}
C1(){
  while(1){
    P(fullA);         // 等A产品
    P(mutex);
    从缓冲区取一个A;
    V(mutex);
    V(emptyA);
    消费时间 1 单位;
  }
}
C2(){
  while(1){
    P(fullB);         // 等B产品
    P(mutex);
    从缓冲区取一个B;
    V(mutex);
    V(emptyB);
    消费时间 1 单位;
  }
}

2)

优先级:P1 > P2 > C1 > C2,非抢占。
初始时刻,P1 先运行。

时间线推导(单位:时间单位)

时间 0:P1 开始生产第 1 个 A(耗时 2)
时间 2:P1 生产完,释放 fullA=1,emptyA=1。
  接着 P1 继续(优先级最高)生产第 2 个 A(耗时 2)
时间 4:P1 生产完,fullA=2,emptyA=0(A 满)。
  P1 想生产第 3 个 A,但 P(emptyA) 阻塞(因为 emptyA=0)。
  轮到 P2(优先级次高)生产第 1 个 B(耗时 1)
时间 5:P2 生产完,fullB=1,emptyB=1。
  P2 继续生产第 2 个 B(耗时 1)
时间 6:P2 生产完,fullB=2,emptyB=0(B 满)...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发