桌上有个能盛的下五个水果的空盘子。爸爸不停的向盘中放苹果或桔子,儿子不停的从盘中取出桔子享用,女儿不停的从盘中取出苹果享用。规定三人不能同时从盘中取放水果。试用信号量实现爸爸、儿子和女儿这三个进程之间的同步
时间: 2023-04-27 18:04:30 浏览: 982
操作系统课设--吃水果问题
4星 · 用户满意度95%
这道题需要使用三个信号量来实现进程之间的同步。分别是:
1. empty:表示盘子中还能放入的水果数量,初值为5。
2. apple:表示盘子中苹果的数量,初值为。
3. orange:表示盘子中桔子的数量,初值为。
爸爸进程:
```
while(true){
// 生产一个苹果或桔子
produce_fruit();
// P操作,等待盘子有空位置
sem_wait(empty);
// 判断是放入苹果还是桔子
if(is_apple()){
// 放入苹果
sem_post(apple);
}else{
// 放入桔子
sem_post(orange);
}
}
```
儿子进程:
```
while(true){
// P操作,等待盘子中有桔子
sem_wait(orange);
// 取出一个桔子
get_orange();
// V操作,增加一个空位置
sem_post(empty);
}
```
女儿进程:
```
while(true){
// P操作,等待盘子中有苹果
sem_wait(apple);
// 取出一个苹果
get_apple();
// V操作,增加一个空位置
sem_post(empty);
}
```
阅读全文