文章
7
粉丝
0
获赞
0
访问
763
(1)
P1(){
wait(emptyA) // 等待A空位
wait(mutex) // 申请互斥访问缓冲区
// 生产A型产品并放入缓冲区
signal(mutex) // 释放互斥锁
signal(fullA) // 增加一个A产品
// 耗时2时间单位
}
P2(){
wait(emptyB) // 等待B空位
wait(mutex) // 申请互斥访问缓冲区
// 生产B型产品并放入缓冲区
signal(mutex) // 释放互斥锁
signal(fullB) // 增加一个B产品
// 耗时1时间单位
}
C1(){
wait(fullA) // 等待A产品
wait(mutex) // 申请互斥访问缓冲区
// 从缓冲区取出A型产品并消费
signal(mutex) // 释放互斥锁
signal(emptyA) // 释放一个A空位
// 耗时1时间单位
}
C2(){
wait(fullB) // 等待B产品
wait(mutex) // 申请互斥访问缓冲区
// 从缓冲区取出B型产品并消费
signal(mutex) // 释放互斥锁
signal(emptyB) // 释放一个B空位
// 耗时2时间单位
}
(2)
P1(最高优先级)先运行:生产第一个A(耗时2时间单位)。
完成后,缓冲区:A=1, B=0;emptyA=1, emptyB=2, fullA=1, fullB=0。
时间=2。
P1继续(仍最高):生产第二个A(耗时2)。
缓冲区:A=2, B=0;emptyA=0, emptyB=2, fullA=2, fullB=0。
时间=4。
P1想生产第三个A,但wait(emptyA)会阻塞(因为emptyA=0),所以P...
登录后发布评论
暂无评论,来抢沙发