苹果-桔子问题
程序员文章站
2022-07-05 08:01:16
...
前言
苹果-桔子问题是操作系统中P、V操作部分经典的问题,属于复杂一点的生产者-消费者问题,可以抽象的理解为两个生产者和两个消费者被连接到大小为1的缓冲区上。
苹果-桔子问题
1. 问题描述
桌子上有一只盘子,每次只能向其中放入一个水果,要求:
- 爸爸专向盘子里放苹果,女儿专等吃盘子中的苹果;
- 妈妈专向盘子里放桔子,儿子专等吃盘子中的桔子;
- 只有盘子为空时,爸爸或妈妈就可向盘子中放入一个水果;
- 仅当盘子中有自己需要的水果时,儿子或女儿可以从盘子中取出。
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
上一篇: elasticsearch增删改查
下一篇: 一、初识数据库