分析設計四個信號量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
}