这是操作系统的一道课堂练习题
题目完整描述:
桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的PV过程。(先设好信号量,再写出几个过程。流程图,伪代码都可以)
(文末补充了另一种更简单的思路)
这里借鉴王道书上的内容:
(1)关系分析:由每次只能向其中放入一只水果可知,爸爸和妈妈是互斥关系。爸爸和女儿、妈妈和儿子是同步关系,而且这两对进程必须连起来,儿子和女儿之间没有互斥和同步关系,因为他们是选择条件执行,不可能并发。
(2)整理思路。有4个进程,可以抽象为两个生产者和两个消费者被连接到大小为1的缓冲区上。
一、流程图:
二、信号量设置
由题可知,
盘子为互斥资源,因为可以放一个水果,所以empty初值为1;
信号量mutex控制对盘子的互斥访问,初值为1;
apple 和orange 分别表示盘中苹果和橘子的个数,初值为0
三、伪代码
semaphore empty=1,mutex=1,apple=0,orange=0;
void father(){