デッドロック
Deadlock
でっどろっく
他の資格での定義
複数のトランザクションが互いに相手がロックしている資源の解放を待ち合い、どちらも処理を進められなくなる状態。検出した場合は一方のトランザクションを強制終了して解消する。
2つ以上のトランザクションが互いに相手がロックしているリソースの解放を待ち合い、処理が永久に進まなくなる状態。DBMSがデッドロックを検出した場合、一方のトランザクションを強制的にロールバックして解消する。
2つ以上のトランザクションが互いに相手のロック解放を待ち続け、いずれも先に進めなくなる状態。検出時にはいずれかのトランザクションをロールバックして解消する。予防策として資源の獲得順序を統一する方法がある。
複数のプロセスやスレッドが互いに相手のリソース解放を待ち続け、すべての処理が停止する状態。相互排他、保持と待機、非横取り、循環待ちの4条件が同時に成立すると発生する。タイムアウトや資源の順序付けで回避する。
2つ以上のトランザクションが互いに相手のロック解放を待ち合い、処理が永久に進まなくなる状態。待ちグラフによる検出や、タイムアウトによる検出を行い、一方のトランザクションをアボートして解消する。
関連キーワードの用語
低優先度タスクが共有資源をロック中に、高優先度タスクがその資源を待つことで、実質的に低優先度タスクが高優先度タスクより先に実行される現象。中優先度タスクによるプリエンプションにより待ち時間が無限に延びる可能性がある(無限優先度逆転)。
共有資源へのアクセスを制御するための同期機構。カウンティングセマフォ(カウンタで管理)とバイナリセマフォ(0/1で管理)がある。P操作(取得/Wait)とV操作(解放/Signal)で資源の排他制御を行う。
相互排他(Mutual Exclusion)のための同期機構。バイナリセマフォと似ているが、所有権の概念を持ち、ロックしたタスクのみがアンロックできる。優先度逆転問題への対策として優先度継承プロトコルをサポートするものが多い。
優先度逆転問題の対策手法。低優先度タスクが共有資源をロック中に高優先度タスクがブロックされた場合、低優先度タスクの優先度を高優先度タスクと同じレベルに一時的に引き上げる。これにより中優先度タスクによるプリエンプションを防止する。
ビットパターンによって複数のイベントの発生を管理するタスク間同期機構。各ビットが異なるイベントに対応し、AND条件(全イベント発生待ち)やOR条件(いずれかのイベント発生待ち)で待ち合わせが可能。RTOSの基本的な同期機能の一つ。
優先度逆転とデッドロックを防止する同期プロトコル。各共有資源にその資源を使用するタスクの最高優先度(優先度上限)を設定し、資源をロックしたタスクの優先度を即座に優先度上限まで引き上げる。優先度継承より保守的だが安全性が高い。