题目:桌上有一空盘,允许存放一只水果,爸爸可以向盘中放苹果,也可以向盘中放桔子,儿子专等着吃盘中的桔子,女儿专等着吃盘中的苹果,规定当盘空时一次只能放一只水果供吃者用,请用P、V原语实现爸爸、儿子和女儿三个并发进程的同步。
解:在本题中,应设置三个信号量S、So、Sa。
信号量S表示盘子是否为空,其初值为1;
信号量So表示盘中是否有桔子,其初值为0;
信号量Sa表示盘中是否有苹果,其初值为0。
同步描述如下:
semaphore S=1,Sa=0,So=0;
father:
while(true)
{
P(S);
将水果放入盘中;
if(放入的是桔子)V(So);
else V(Sa);
};
son:
while(true)
{
P(So);
从盘中取出桔子;
V(S);
吃桔子;
};
daughter:
while(true)
{
P(Sa);
从盘中取出苹果;
V(S);
吃苹果;
};