0

哲学者向けのスレッドを作成していました。擬似コードは次のとおりです。

while(true)
  think
  get left chopstick
  get right chopstick
  eat
  putdown left chopstick
  putdown right chopstick

直感的には、箸を離す順番は関係ないと思います。では、左の箸を先に置く代わりに、右の箸を先に置いてもいいですか?これによりエラーが発生しますか?私はそうは思わない。これがデッドロックを引き起こす場合、どのように?そうでない場合は、最初に残すことをお勧めします。なぜですか?

ありがとうございました!

4

3 に答える 3

0

ここにはいくつかのロックがあります:

while(true)
  think

  wait until you finished thinking

  get left chopstick
  get right chopstick

  wait until you you took both sticks

  eat
  putdown left chopstick
  putdown right chopstick

ロック (待機) の間のことは、問題ではないため、任意の順序で成功する可能性があります。

于 2014-04-30T16:40:18.423 に答える
0

視覚的に想像してみてください。4 人の哲学者がいて、それぞれの間に箸があるとします。

四人が一斉に左の箸を掴む。誰もが箸を持っており、誰も箸を争っていないので、これは問題ありません。

それから彼らは右を見ると、誰もが4つのうちの1つを持っているので、箸が残っていません.

彼らは食べることができないので、行き詰まります。

しばらくしてあきらめて箸を置くようにコーディングすると、全員が左の箸を持ち上げようとして右の箸がなくなるという同じ問題に遭遇します (タイミングによってはこれが起こらない可能性がありますが、コーディングする方がよい)。

代わりに、哲学者を選び、最初に右の箸を持ち上げてもらいます。右の箸の哲学者または左の哲学者のいずれかが両方の箸を手に入れて食べることができるようになるため、これは行き詰まりを打破します(最終的には周りを回って全員に食事を提供します)。

于 2014-04-30T16:43:09.623 に答える