农夫-猎人问题
程序员文章站
2022-07-05 07:57:52
...
前言
农夫-猎人问题和苹果-桔子问题非常类似,也是操作系统中的经典问题
农夫-猎人问题
1. 问题描述
有一个铁笼子,每次只能放入一个动物。猎手向笼中放入老虎,农夫向笼中放入 羊;动物园等待取笼中的老虎,饭店等待取笼中的羊。
2. 问题分析
和苹果-桔子问题类似,有4个进程,笼子是互斥量,猎手和动物园是同步关系,农夫和饭店也是同步关系。
3. P、V操作
semaphore cage = 1; // 互斥信号量,笼子只允许放入一只动物
semaphore tiger = 0; // 笼子里没有老虎
semaphore sheep = 0; // 笼子里没有羊
cobegin
process hunter() {
while(true) {
......
P(cage);
{将虎放入笼子};
V(tiger);
}
}
process zoo() {
while(true) {
P(tiger);
{将虎取出笼子};
V(cage);
......
}
}
process peasant() {
while(true) {
......
P(cage);
{将羊放入笼子};
V(sheep);
}
}
process hotel() {
while(true) {
P(sheep);
{将羊取出笼子};
V(cage);
......
}
}
coend
d=====( ̄▽ ̄*)b
下一篇: 独木桥问题