欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

苹果-桔子问题

程序员文章站 2022-07-05 08:01:16
...

前言

苹果-桔子问题是操作系统中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