笼子,猎人仅能向笼子中放入兔子(每次只能放入一只),若笼子时满的,则猎人必须等待;饭店老板仅能从笼子中取兔子(每次只能取出一只),若笼子时空的则他也必须等待。假·····"/>
有一只最多能装2只兔子的铁笼子,猎人仅能向笼子中放入兔子(每次只能放入一只),若笼子时满的,则猎人必须等待;饭店老板仅能从笼子中取兔子(每次只能取出一只),若笼子时空的则他也必须等待。假·····
有一只最多能装2只兔子的铁笼子,猎人仅能向笼子中放入兔子(每次只能放入一只),若笼子时满的,则猎人必须等待;饭店老板仅能从笼子中取兔子(每次只能取出一只),若笼子时空的则他也必须等待。假设初始时笼子时空的。定义信号量并初始化,使用P、V操作模拟猎人和饭店老板进程之间的同步与互斥。
Semaphore x = 0; //这里的x代表笼子中兔子的数量
Semaphore y = 2; //这里的y时笼子中空位数量
Semaphore mutex = 1; //互斥访问笼子
hunter(){
while(TRUE){
P(y); //猎人让空位减少一个
P(mutex);
猎人放兔子
V(mutex);
V(x); // 猎人让兔子增加一个
}
}
boss(){
while(TRUE){
P(x); //老板让兔子减少一个
P(mutex);
老板取兔子
V(mutex);
V(y); // 老板让空位增加一个
}
}
主线程:
void main(){
cobegin
hunter();
boss();
coend
}
更多推荐
有一只最多能装2只兔子的铁笼子,猎人仅能向笼子中放入兔子(每次只能放入一只),若笼子时满的,则猎人必须等待;饭店老板仅能从笼子中取兔子(每次只能取出一只),若笼
发布评论