自分では解決できない並行プログラミングの問題があります。それを解決するには、Java Monitors を使用する必要があります。
問題は次のとおりです。
アマゾンのジャングルの奥深くには、クーイーコーイと呼ばれる鳥が生息しています。これらの注目に値する鳥は、ヒナを育てる際に異常な行動をとります。
- 両親は、狩り、巣に食べ物を落とし、休むことを交互に繰り返します。
- 両親は、一定量 (または部分) の食物を巣に預けることによって、ヒナに餌を与えます。
- 利用可能なすべての食物を食べなければならないことをヒナに教えるために、親は、以前の食物がすべて消費されるまで、決して巣に食物を預けません。巣が空でない場合は、餌を追加する前に巣が空になるまで待ちます。
- 巣はせいぜいCの容量の食物を含むことができることに注意してください(不思議なことに、親は狩りからC以上の食物を持って戻ってくることはありません.観察によると、親は余分な食物をせいぜい食物の C 部分はこれまでに堆積されます)。
その間、ひよこは赤ちゃんと同じようにすべてのことを行います。
- 寝る
- 食べる(一度に1食分)
- グアノを生産する
このプログラムは、これらの鳥の生活をシミュレートし、2 つの親プロセスといくつかのヒナ プロセスを作成します。
したがって、ヒヨコと親の行動は、次の擬似コードで説明されている状況に似ています。
process Chicks(many of them) {
repeat {
sleep();
get_food();
eat();
digest_and_poop();
}
}
process Parents(just two) {
repeat {
hunt();
deposit_food();
rest();
}
}
シミュレーションは、次のパラメーターで呼び出されます。
- ひよこ: ひよこプロセスの数です
- baby_iter: ひよこが大人になるまでの反復回数です。
- max_food_size: 親が狩りから持ち帰る最大のポーションサイズです (結局のところ、巣の容量と同じです)
- hunt_success_rate: 親が狩りをしたときの成功率を表します。50% の率は、親が食物なしで戻ることを意味します。
同期はモニターによって行われます。
誰か助けてくれませんか?セマフォに関する同様の問題を解決しましたが、モニターが Java でどのように機能するかわかりません。
ありがとうございました。