分析设计四个信号量metux,empty、apple、orange;
metux表示:爸爸、妈妈、儿子和女儿进程对盘子的互斥使用;
empty表示:盘子是否为空;
apple表示:是否可以取苹果;
orange表示:是否可以取桔子。
算法描述如下:
semaphore empty=1,nutex=1,apple=0,orange=0; //为四个信号量赋初值
void father(){
do{
wait(empty); //等待盘子为空
wait(metux); //等待获取对盘子的操作
爸爸向盘中放一个苹果;
signal(mutex); //释放对盘子的操作
signal(apple); //通知女儿可以来盘子中取苹果
}while(TRUE);
}
void mather(){ //与父亲进程雷同
do{
wait(empty);
wait(metux);
妈妈向盘中放一个桔子;
signal(mutex);
signal(orange);
}while(TRUE);
}
void son(){
do{
wait(orange); //判断盘子中是否有桔子
wait(metux); //等待获取对盘子的操作
儿子取出盘中的桔子;
signal(mutex); //释放对盘子的操作
signal(empty); //盘子空了,可以继续放水果了
}while(TRUE);
}
void daugther(){ //与儿子进程雷同
do{
wait(apple);
wait(metux);
女儿取出盘中的苹果;
signal(mutex);
signal(empty);
}while(TRUE);
}
void main() { //四个并发进程的同步执行
cobegin
father();mather();son();daugther();
coend
}