有一个盘子,爸爸向这个盘子里放苹果,妈妈向这个盘子里放橘子。儿子只从这个盘子里拿妈妈放置的橘子吃,而女儿从这个盘子里拿爸爸放的苹果吃。
三个进程同步的伪代码:
empty=1,apple=0,orange=0,mutex=1;
/*empty表示盘子的剩余量。mutex是互斥信号,即同一时刻只有一个人能进行放或吃的操作*/
void parent(){
while(1){
p(empty);
p(mutex);
//放水果;
v(mutex);
if(放苹果){
v(apple);
}
if(放橙子){
v(orange);
}
}
}
void son(){
while(1){
p(orange);
p(mutex);
//吃橙子;
v(mutex);
v(empty);
}
}
void daughter(){
while(1){
p(apple);
p(mutex);
//吃苹果;
v(mutex);
v(empty);
}
}
四个进程同步伪代码:
empty=1,apple=0,orange=0,mutex=1;
void father(){
while(1){
p(empty);
p(mutex);
//放苹果
v(mutex);
v(apple);
}
}
void mother(){
while(1){
p(empty);
p(mutex);
//放橙子
v(mutex);
v(orange);
}
}
void son(){
while(1){
p(orange);
p(mutex);
//吃橙子
v(mutex);
v(empty);
}
}
void son(){
while(1){
p(apple);
p(mutex);
//吃苹果
v(mutex);
v(empty);
}
}