一、爸爸放苹果妈妈放橘子儿子橘子女儿吃苹果问题
现在有一个盘子,爸爸向这个盘子里放苹果,妈妈向这个盘子里放橘子。儿子只从这个盘子里拿妈妈放置的橘子吃,而女儿从这个盘子里拿爸爸放的苹果吃。这是由生产者-消费者问题,发展过来的多生产者多消费者问题
二、思路分析
对于盘子来说,这是一个临界资源,一次只能有一个生产者或者一个消费者进入,因此需要设置互斥锁 对于盘子进行限制。对于一个盘子,其容量是有限的,对应的临界资源是有限的。对于爸爸和妈妈放置的橘子,我们也需要对其进行互斥保护,因此需要设置相应的信号量进行保护。
三、代码实现
semaphore mutex=1;//互斥锁
semaphore plat=n;//盘子容量
semaphore apple=0;//苹果数量
semaphore orange=0;//橘子数量
//爸爸
father(){
while(1){
p(plat);//判断盘子是否有空位
P(mutex);//判断是否可以放苹果
//放苹果
V(apple);//盘子里苹果+1
V(mutex);//释放互斥锁
}
}
//妈妈
mother(){
while(1){
p(plat);//判断盘子是否有空位
P(mutex);//判断是否可以放橘子
//放苹果
V(orange);//盘子里橘子+1
V(mutex);//释放互斥锁
}
}
//儿子
son(){
while(1){
p(orange);//判断盘子是否有橘子
P(mutex);//判断是否可以拿橘子
//拿橘子吃
V(plat);//盘子里空位+1
V(mutex);//释放互斥锁
}
}
//女儿
daughter(){
while(1){
p(apple);//判断盘子是否有空位
P(mutex);//判断是否可以拿苹果
//拿苹果吃
V(plat);//盘子里空位+1
V(mutex);//释放互斥锁
}
}
一、爸爸放苹果妈妈放橘子儿子橘子女儿吃苹果问题
现在有一个盘子,爸爸向这个盘子里放苹果,妈妈向这个盘子里放橘子。儿子只从这个盘子里拿妈妈放置的橘子吃,而女儿从这个盘子里拿爸爸放的苹果吃。这是由生产者-消费者问题,发展过来的多生产者多消费者问题
二、思路分析
对于盘子来说,这是一个临界资源,一次只能有一个生产者或者一个消费者进入,因此需要设置互斥锁 对于盘子进行限制。对于一个盘子,其容量是有限的,对应的临界资源是有限的。对于爸爸和妈妈放置的橘子,我们也需要对其进行互斥保护,因此需要设置相应的信号量进行保护。
三、代码实现
semaphore mutex=1;//互斥锁
semaphore plat=n;//盘子容量
semaphore apple=0;//苹果数量
semaphore orange=0;//橘子数量
//爸爸
father(){
while(1){
p(plat);//判断盘子是否有空位
P(mutex);//判断是否可以放苹果
//放苹果
V(apple);//盘子里苹果+1
V(mutex);//释放互斥锁
}
}
//妈妈
mother(){
while(1){
p(plat);//判断盘子是否有空位
P(mutex);//判断是否可以放橘子
//放苹果
V(orange);//盘子里橘子+1
V(mutex);//释放互斥锁
}
}
//儿子
son(){
while(1){
p(orange);//判断盘子是否有橘子
P(mutex);//判断是否可以拿橘子
//拿橘子吃
V(plat);//盘子里空位+1
V(mutex);//释放互斥锁
}
}
//女儿
daughter(){
while(1){
p(apple);//判断盘子是否有空位
P(mutex);//判断是否可以拿苹果
//拿苹果吃
V(plat);//盘子里空位+1
V(mutex);//释放互斥锁
}
}