デッドロックとは?
デッドロック(deadlock)とは、複数の処理が互いに相手の持っている資源(ロック)の解放を待ち続け、どちらも先に進めなくなってしまう状態です。
たとえば、処理Aが資源1を確保したまま資源2を待ち、処理Bが資源2を確保したまま資源1を待つ——お互いが「相手が離すのを待つ」ので、永遠に動けません。1本しかない橋の両側から来た2台の車が、譲り合えずに立ち往生するイメージです。データベースで、複数の人が同じデータを別々の順番でロックしたときなどに起こります。
起こる条件としては、資源を独り占めできること、確保したまま次を待つこと、横取りできないこと、そして待ちが輪(循環)になっていること、が重なったときです。
対策の代表は、資源を確保する順番を全員でそろえること。みんなが「資源1 → 資源2」の順で取るように決めれば、待ちの輪ができなくなり、デッドロックを防げます。ほかに、一定時間で待ちを打ち切る(タイムアウト)方法もあります。
基本情報技術者試験では、デッドロックの発生条件や、排他制御・ロックとあわせて問われます。
🔗 関連:データベース正規化の記事 / 用語辞典トップ