2、桌子上有一个空盘子,允许存放一只水果,爸 爸可以向盘中放苹果,妈妈向盘子中放橘子,女儿 专门吃盘子中的苹果,儿子专门吃盘子中的橘子。 规定当盘子空的时候一次只能放一只水果,请用信 号量实现他们之间的同步与互斥,并且给出C语言的完整实现。
时间: 2024-05-02 19:18:43 浏览: 170
pc.rar_site:www.pudn.com_吃苹果_桌上有一空盘
信号量的定义和初始化:
```c
#include <semaphore.h>
sem_t mutex; // 互斥信号量,保证一次只能有一个人操作盘子
sem_t apple; // 苹果信号量,表示盘子中有苹果
sem_t orange; // 橘子信号量,表示盘子中有橘子
sem_init(&mutex, 0, 1);
sem_init(&apple, 0, 0);
sem_init(&orange, 0, 0);
```
爸爸向盘中放苹果的代码:
```c
sem_wait(&mutex); // 申请互斥信号量,保证一次只能有一个人操作盘子
put_apple(); // 放苹果
sem_post(&apple); // 发送苹果信号量,表示盘子中有苹果了
sem_post(&mutex); // 释放互斥信号量,让其他人可以操作盘子
```
妈妈向盘中放橘子的代码:
```c
sem_wait(&mutex);
put_orange();
sem_post(&orange);
sem_post(&mutex);
```
女儿从盘子中取苹果的代码:
```c
sem_wait(&apple); // 等待苹果信号量,表示盘子中有苹果
get_apple(); // 取苹果
```
儿子从盘子中取橘子的代码:
```c
sem_wait(&orange);
get_orange();
```
阅读全文