- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:巡回バッファを使用した生産者-消費者問題について)
巡回バッファを使用した生産者-消費者問題について
このQ&Aのポイント
- ダイテル社のJavaプログラミングvol.2という本のサンプルコードで、巡回バッファを使用した生産者-消費者問題を再現しています。
- このプログラムでは、生産者スレッドが0~9の整数を書き込み、消費者スレッドがそれを読み込むことで生産者-消費者の関係を再現しています。
- ただし、プログラムの実行結果について質問があります。生産者スレッドが値を書き込み終わった後、消費者スレッドがwhileループを抜ける前にスレッドが終了してしまう可能性があると思われるため、この挙動について説明しました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます。 確かに、おかしいですね。 ほとんどの場合、5,6,7,8,9が消費されないまま、終了してしまいますね。 HoldIntegerクラスのgetmoreDataメソッドは、 readLoc == writeLoc の場合、バッファが満タンの場合と、空の場合の二通りあるのだから、 正しくは public boolean getmoreData(){ if ( moreData == false && readable == false) return false; return true; } こうでしょうねぇ。 それにしても、妙に読みにくいサンプルですよねぇ。 バッファにたまっている要素数を、カウントしていったほうが、読みやすくなると思うんですけどなぁ。 そうすれど、こんな簡単な失敗もしなくてすむのに・・・。 あんまり、よくない本なんですかね。
お礼
素早い回答ありがとうございます! 確かにreadable==falseという条件なら納得できます。 本が間違ってることはないって頭で考えてたんで気づかなかったです。 この本にのってるサンプルは、あまり良いものではないかもしれませんね・・・ ありがとうございました!