ホーム用語辞典 > デッドロック

デッドロックとは?

デッドロック(deadlock)とは、複数の処理が互いに相手の持っている資源(ロック)の解放を待ち続け、どちらも先に進めなくなってしまう状態です。

たとえば、処理Aが資源1を確保したまま資源2を待ち、処理Bが資源2を確保したまま資源1を待つ——お互いが「相手が離すのを待つ」ので、永遠に動けません。1本しかない橋の両側から来た2台の車が、譲り合えずに立ち往生するイメージです。データベースで、複数の人が同じデータを別々の順番でロックしたときなどに起こります。

デッドロック:お互いが相手の資源を待ち、輪になって止まる 資源2の解放を待つ 資源1の解放を待つ 処理A 資源1を確保中 資源2を待つ 処理B 資源2を確保中 資源1を待つ
図:A→B→Aと待ちが輪(循環)になると、どちらも永遠に進めない。確保する順番をそろえれば防げる

起こる条件としては、資源を独り占めできること、確保したまま次を待つこと、横取りできないこと、そして待ちが輪(循環)になっていること、が重なったときです。

対策の代表は、資源を確保する順番を全員でそろえること。みんなが「資源1 → 資源2」の順で取るように決めれば、待ちの輪ができなくなり、デッドロックを防げます。ほかに、一定時間で待ちを打ち切る(タイムアウト)方法もあります。

基本情報技術者試験では、デッドロックの発生条件や、排他制御・ロックとあわせて問われます。

🔗 関連:データベース正規化の記事用語辞典トップ