设置1个互斥信号量mutex;3个同步信号量apple、orange均为0,empty_num=2,empty_num即盘子上还可以放水果的个数。
对于父亲进程Father():
while ()
{
P(empty_num); // 资源信号量的PV操作应放在互斥信号量的PV操作外侧
P(mutex); // 父亲放水果时儿女不能取
// 放水果的操作
if (fruit == apple)
V(apple);
else if (fruit == orange)
V(orange);
V(mutex);
}
对于儿子进程Son():
while(1)
{
P(orange);
P(mutex); // 儿女取时父亲不能放水果
// 取橘子操作
V(mutex);
V(empty_num); // 取完橘子,可以放水果的个数+1
}
对于女儿进程Daughter():
while(1)
{
P(apple);
P(mutex);
// 取苹果操作
V(mutex);
V(empty_num); // 取完苹果,可以放水果的个数+1
}