解:应设置3个信号量S、So、Sa。
S表示盘子是否为空,其初值为1
So表示盘中是否有桔子,其初值为0
Sa表示盘中是否有苹果,其初值为0
同步描述如下:
int S=1;
int Sa=0;
int So=0;
main()
{
cobegin
father();
son();
daughter();
coend
}
father()
{
while(1)
{
p(S);
将水果放入盘中;
if(放入的是桔子) v(So);
else v(Sa);
}
}
son()
{
while(1)
{
p(So);
从盘中取出桔子;
v(S);
食桔子;
}
}
daughter()
{
while(1)
{
p(Sa);
从盘中取出苹果;
v(S);
食苹果;
}
}