デッドロック、ライブロック、飢餓

デッドロック

デッドロックは、各リードに依存して、エンティティ間で、特定のプログラム状態で互いに待ちの状態にあった、いかなる個人は上を移動することはできません。間でマルチスレッド、マルチプロセスが存在することになります。

必要な条件をデッドロック:

  1. リソースの排他的(排他使用)
  2. 元のリソースの所有権を維持しながら、新しいリソースを申請し、所持して待ちます
  3. つかむことができない、強制的にリソースを取ることができない、唯一解放するためにイニシアチブを取ることができます
  4. 円形待ち、P1、P2がリソースを占有待って、待ちを占有P3 P1〜P4 ... Pnのリソースを待って、リソースを待っによって占めP2 P3は、ループが形成され、待ちます

どのようにプログラミングでのデッドロックを防ぐためにしようとしていますか?

  1. ピットを交換しやすく、複数のロックの使用を避けるようにしてください
  2. あなたは良いロック取得の順序を設計しようとすると、複数のロックを使用する必要があります。
  3. タイムアウトを使用し、プログラムは、より多くの制御性をもたらします
  4. そのような静的コード分析(FindBugsの)によるような他の方法、競合または可能なデッドロック状況が位置するように、固定されたパターンを見つけます。

ライブロック

スレッドAおよびB(プロセスを使用する必要がある)の橋を横断する必要があり、丁寧である行かない(同じシステムの優先度に、高い優先順位自身考慮されていない)ので、膠着状態が継続される。(紳士、相互謙虚)

いくつかの条件が繰り返し試み、その結果、満たされていないため、タスクやパフォーマーは、ブロックされていない、失敗した試みに失敗しました。

ライブロックとの違いをデッドロックが生きているエンティティがロック状態にあるということであるデッドロックの待機中に絶えず変化する、いわゆる「リビング」エンティティ表現がある、自分のロック解除のロックを生きることが可能であり、デッドロックはできません。

飢餓

助かりもかかわらず、実行可能なプロセスを意味するが、スケジューラ、スケジューリング状況が実行できない無限に無視されました。

おすすめ

転載: www.cnblogs.com/fmys/p/10982894.html