苹果-桔子问题

前言

苹果-桔子问题是操作系统中P、V操作部分经典的问题,属于复杂一点的生产者-消费者问题,可以抽象的理解为两个生产者和两个消费者被连接到大小为1的缓冲区上。


苹果-桔子问题

1. 问题描述

桌子上有一只盘子,每次只能向其中放入一个水果,要求:

  1. 爸爸专向盘子里放苹果,女儿专等吃盘子中的苹果;
  2. 妈妈专向盘子里放桔子,儿子专等吃盘子中的桔子;
  3. 只有盘子为空时,爸爸或妈妈就可向盘子中放入一个水果;
  4. 仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出。
2. 问题分析

首先4个进程对盘子的操作是互斥的,而爸爸和女儿,妈妈和儿子之间又是同步关系,所以需要设置两个同步信号量,一个互斥信号量

3. P、V操作
semaphore plate = 1;  // 互斥信号量,盘子里只允许放一个水果
semaphore apple = 0;  // 盘子里没有苹果,同步信号量
semaphore orange = 0; // 盘子里没有桔子,同步信号量

cobegin
process father() {
    while(true) {
        P(plate);
        {把苹果放入plate};
        V(apple);
    }
}

process daughter() {
    while(true) {
        P(apple);
        {从plate中取苹果};
        V(plate);
        {吃苹果};
    }
}

process mother() {
    while(true) {
        P(plate);
        {把桔子放入plate};
        V(orange);
    }
}

process son() {
    while(true) {
        P(orange);
        {从plate中取桔子};
        V(plate);
        {吃桔子};
    }
}
coend

d=====( ̄▽ ̄*)b

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值