【正确答案】
【答案解析】盘子为互斥资源,只能放入一个水果,设信号量empty初值为1;爸爸放苹果前先看看有无空间,若有则抢盘子,放入苹果后向女儿发信号;妈妈放橘子前先看看有无空间,若有则抢盘子,放入橘子后向儿子发信号;女儿先看有无苹果,若有则抢盘子,取走苹果后发出盘子置空的信号;儿子看有无橘子,若有则抢盘子,取走橘子后发出盘子置空的信号;置空信号应是爸爸和妈妈都可以接收的。该题是生产者/消费者问题的变形,有两对生产者和消费者。生产者需要指明是给哪个消费者的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区可由两个生产者随意争夺。此处无须设置信号量控制对盘子的互斥访问,因为盘子只能放一个产品;apple表示盘中有苹果,orange表示盘中有橘子,初值均为0。
Parbegin
爸爸:begin
L1:p(empty);
放苹果;
V(apple);
Goto L1;
end;
妈妈:begin
L2:P(empty);
放橘子;
V(orange);
Goto L2;
end;
女儿:begin
L3:P(apple);
取苹果;
V(empty);
Goto L3;
end;
儿子:begin
L4:p(orange);
取橘子;
V(empty);
Goto L4;
end;
Parend