ライブロック: ライブロックとは何か、例、デッドロックとの違い
ライブロックとは何ですか?
A ライブロック これは、多くの重複する共有ロックが互いに干渉し続けるため、排他的ロックの要求が繰り返し拒否される状況です。 プロセスはステータスを変更し続けるため、タスクを完了することがさらに妨げられます。 これにより、タスクを完了することがさらに妨げられます。
ライブロックの例
例1:
ライブロックの最も簡単な例は、廊下で向かい合った XNUMX 人の人物が、お互いを脇に移動して相手を追い越すことです。 そのときは同じ動きをするので、結局何も進まないまま左右に移動してしまいます。 ここでは、それらは決して交差しません。
例2:
上の画像からわかるように、指定された XNUMX つのプロセスはそれぞれ XNUMX つのリソースを必要とし、プリミティブ ポーリング Enter レジストリを使用して、必要なロックを取得しようとします。 試行が失敗した場合、メソッドは再度機能します。
- プロセスA保留Yリソース
- プロセス B はリソース X を保持します
- プロセス A には X リソースが必要です
- プロセス B には Y リソースが必要です
プロセス A が最初に実行されてデータ リソース X を取得し、次にプロセス B が実行されてリソース Y を取得すると仮定します。どちらのプロセスが先に実行されても、それ以上進むことはありません。
ただし、XNUMX つのプロセスはどちらもブロックされません。 これらは何の進歩もなく繰り返し CPU リソースを使い果たしますが、処理ブロックも停止します。
したがって、この状況は、 デッドロック ブロックされているプロセスは 1 つもありませんが、デッドロックに相当する状況、つまり LIVELOCK に直面しているからです。
ライブロックの原因は何ですか?
ライブロックは、特定のシステムで許可されるプロセスの合計数がプロセス テーブル内のエントリの合計数によって定義される必要がある場合に発生します。 したがって、プロセス テーブル スロットは有限リソースと呼ばれる必要があります。
デッドロックとは何ですか?
デッドロックとは、別の待機中のプロセスが要求されたリソースを保持しているために、いずれかのプロセスが待機状態になったときに OS で発生する状況です。デッドロックは、複数のプロセスがソフト ロックまたはソフトウェアと呼ばれる特定の種類の相互に排他的なリソースを共有するマルチプロセスでよく見られる問題です。
デッドロックの例
- 現実世界の例としては、一方向にのみ進む交通が挙げられます。
- ここでは、ブリッジはリソースとみなされます。
- したがって、デッドロックが発生した場合、1 台の車がバックアップ (リソースを先取りしてロールバック) すると簡単に解決できます。
- 行き詰まりが発生した場合、複数の車両をバックアップする必要がある可能性があります。
- したがって、飢餓が発生する可能性があります。

飢餓とは?
スターベーションとは、優先度の低いプロセスがすべてブロックされ、優先度の高いプロセスが続行される状況です。 どのシステムでも、優先度の高い/低いリソースに対する要求は動的に発生し続けます。 したがって、誰がいつ支援を受けるかを決定するための何らかの政策が必要となります。
一部のアルゴリズムを使用すると、デッドロックが発生していなくても、一部のプロセスが目的のサービスを受けられない場合があります。一部のスレッドが共有リソースを長時間使用できない状態にすると、リソース不足が発生します。
飢餓の例
たとえば、オブジェクトは、返されるまでに長い時間がかかる可能性のある同期メソッドを提供します。1 つのスレッドがこのメソッドを頻繁に使用すると、同じオブジェクトへの同期アクセスを頻繁に必要とする他のスレッドがブロックされることがよくあります。
デッドロック、スターベーション、ライブロックの違い
- デッドロックとは、要求されたリソースが別の待機中のプロセスによって保持されているため、いずれかのプロセスが待機状態になったときに OS で発生する状況です。
- 一方、ライブロックはデッドロックとほぼ同じですが、ライブロックに関係するプロセスの状態は常に変化し続け、どれも進行しないという点が異なります。
- したがって、Livelock はリソース枯渇の特殊なケースです。
製品概要
- 定義: ライブロックとは、多くの重複する共有ロックが互いに干渉し続けるため、排他的ロックの要求が繰り返し拒否される状況です。
- ライブロックは、特定のシステムで許可されるプロセスの合計数がプロセス テーブル内のエントリの合計数によって定義される必要がある場合に発生します。
- デッドロックとは、別の待機中のプロセスが要求されたリソースを保持しているために、いずれかのプロセスが待機状態になったときに OS で発生する状況です。
- 現実世界の例としては、一方向にのみ進む交通が挙げられます。
- Livelock の例としては、廊下で向かい合った XNUMX 人がお互いを脇に移動して相手を追い越す場合が考えられます。
- スターベーションとは、優先度の低いプロセスがすべてブロックされ、優先度の高いプロセスが続行される状況です。

