我有一个我自己无法解决的并发编程问题。我必须使用 Java Monitors 来解决它。
问题如下:
在亚马逊丛林深处生活着一种叫做 Cooeecooee 的鸟类。这些非凡的鸟类在饲养小鸡时有一种不同寻常的行为:
- 父母在狩猎、在巢中丢食物和休息之间交替进行。
- 父母通过在巢中存放一定数量(或部分)的食物来喂养小鸡。
- 为了教导小鸡他们必须吃掉所有可用的食物,父母从不将食物存放在巢中,直到所有以前的食物都吃完。如果巢不是空的,它们会等到巢空了再添加食物。
- 请注意,巢穴最多可以容纳 C 容量的食物(奇怪的是,父母从狩猎中返回的食物永远不会超过 C 份。观察表明,父母会以最多的方式用额外的食物喂养自己C 份食物将被存放)。
与此同时,小鸡会做婴儿会做的所有事情:
- 睡觉
- 吃(一次1份食物)
- 生产鸟粪
该程序模拟了这些鸟类的生活,创建了两个父进程和几个小鸡进程。
因此,小鸡和父母的行为类似于以下伪代码所描述的情况:
process Chicks(many of them) {
repeat {
sleep();
get_food();
eat();
digest_and_poop();
}
}
process Parents(just two) {
repeat {
hunt();
deposit_food();
rest();
}
}
将使用以下参数调用模拟:
- chicks:是chick进程的数量
- baby_iter:是小鸡成年前的迭代次数
- max_food_size:是父母从狩猎中带回来的最大份量(事实证明,与巢的容量相同)
- Hunting_success_rate:表示父母在狩猎时的成功率。50% 的比率意味着父母没有食物返回。
同步由监视器完成。
有人可以帮助我吗?因为我已经用信号量解决了类似的问题,但我不知道监视器是如何在 Java 上工作的。
谢谢你。