文章
121
粉丝
195
获赞
0
访问
15.8k
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 满)...
登录后发布评论
暂无评论,来抢沙发