问题描述:
桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,那么四人之间的同步关系是什么?在并发下如何实现四人正确活动的程序?
四人之间的关系:
1爸爸,妈妈都要使用盘子,所以两者是互斥关系; 2爸爸放的苹果,女儿吃,所以两者是同步关系; 3妈妈放的桔子,儿子吃,所以两者也是同步关系。
实现
mutex互斥信号量来控制对盘子的访问,用empty,orange,apple分别代表以上同步关系(只有判空,才能爸妈进行水果的放取,只有orange,儿子才能来吃,只有apple,女儿才能进行吃苹果的活动)。
mother:
while(true) {
P(empty);
P(mutex);
放入桔子(cs代码段)
V(mutex)
V(orange);
}
father:
while(true) {
P(empty);
P(mutex);
//放入苹果(cs代码段)
V(mutex)
V(apple);
}
son:
while(true) {
P(orange)
P(mutex)
//取桔子(cs代码段)
V(mutex);
V(empty);
}
daughter:
while(true) {
P(apple)
P(mutex)
//取苹果(cs代码段)
V(mutex);
V(empty);
}
main(){
Semaphore mutex = 1; //互斥信号量
Semaphore empty = 1, orange = apple = 0; //同步关系
cobegin
father();mother();son();daughter();
coend
}