0

我有一个我自己无法解决的并发编程问题。我必须使用 Java Monitors 来解决它。

问题如下:

在亚马逊丛林深处生活着一种叫做 Cooeecooee 的鸟类。这些非凡的鸟类在饲养小鸡时有一种不同寻常的行为:

  1. 父母在狩猎、在巢中丢食物和休息之间交替进行。
  2. 父母通过在巢中存放一定数量(或部分)的食物来喂养小鸡。
  3. 为了教导小鸡他们必须吃掉所有可用的食物,父母从不将食物存放在巢中,直到所有以前的食物都吃完。如果巢不是空的,它们会等到巢空了再添加食物。
  4. 请注意,巢穴最多可以容纳 C 容量的食物(奇怪的是,父母从狩猎中返回的食物永远不会超过 C 份。观察表明,父母会以最多的方式用额外的食物喂养自己C 份食物将被存放)。

与此同时,小鸡会做婴儿会做的所有事情:

  1. 睡觉
  2. 吃(一次1份食物)
  3. 生产鸟粪

该程序模拟了这些鸟类的生活,创建了两个父进程和几个小鸡进程。

因此,小鸡和父母的行为类似于以下伪代码所描述的情况:

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 上工作的。

谢谢你。

4

0 回答 0