admin管理员组文章数量:1026989
一、爸爸放苹果妈妈放橘子儿子橘子女儿吃苹果问题
现在有一个盘子,爸爸向这个盘子里放苹果,妈妈向这个盘子里放橘子。儿子只从这个盘子里拿妈妈放置的橘子吃,而女儿从这个盘子里拿爸爸放的苹果吃。这是由生产者-消费者问题,发展过来的多生产者多消费者问题
二、思路分析
对于盘子来说,这是一个临界资源,一次只能有一个生产者或者一个消费者进入,因此需要设置互斥锁 对于盘子进行限制。对于一个盘子,其容量是有限的,对应的临界资源是有限的。对于爸爸和妈妈放置的橘子,我们也需要对其进行互斥保护,因此需要设置相应的信号量进行保护。
三、代码实现
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);//释放互斥锁
}
}
版权声明:本文标题:操作系统经典问题之爸爸放苹果妈妈放橘子儿子吃橘子女儿吃苹果问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1740122806a1715968.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论