프로세스 동기화 및 상호 배제 연습하는 운영 체제 :
단 열매를이 테이블에 접시와 넣을 수 있습니다. 아빠가 요리 특별한에 사과를 넣어, 넣어 오렌지 접시에 특별한 엄마,
아들은 오렌지, 딸과 사과를 먹는 다른 특별한 요리로 특별한 요리를 먹는다. PV 작업과 그들 사이의 동기화 메커니즘.
분석 및 네 개의 세마포어 metux, 빈, 사과, 오렌지의 디자인;
metux는 말했다 : 아버지, 어머니, 아들과 접시의 프로세스의 독점 사용에 딸;
빈, 그는 말했다 : 접시가 비어 있는지;
사과는 말한다 : 나는 사과를 취할 수있다;
오렌지는 말했다 : 당신이 오렌지을 할 수 있습니다.
알고리즘은 다음과 같이 설명된다 :
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
}