AI活用の教科書

デッドロック

Deadlockでっどろっく

ひとことで言うと

二つの処理が互いに相手のロック解放を待ち合い、どちらも進めなくなる膠着状態のことです。

📖 もうちょい詳しく

何が新しいの?

たくさんの処理を同時に動かすと、同じデータを取り合う場面が出てきます。そこでデータベースは、いじっている最中のデータに「ロック(鍵)」をかけて、ほかの処理が勝手に書き換えないように守ります。ところが、このロックの取り合い方しだいで、お互いが相手を待ったまま止まってしまうことがあります。それがデッドロックです。

どうやって動いてるの?

処理Aがデータ1にロックをかけ、処理Bがデータ2にロックをかけたとします。次にAがデータ2を、Bがデータ1を欲しがると、どちらも相手が鍵を手放すのを待ちます。お互いが待ち続けるので、どちらも先へ進めません。多くのデータベースはこの待ち合いの輪を見つけると、片方の処理を強制的に中断(ロールバック)して、もう片方を通します。

何ができるの?

仕組みを知っておくと、止まったときに「相手を待ち合っている」と原因を見当づけやすくなります。アプリ側では、ロックをかける順番をそろえる、処理を短く区切る、といった工夫で起きにくくできます。完全に防ぐのは難しいので、中断されたら少し待ってやり直す、という備えも合わせて入れておくことが多いです。

🌱 身近なたとえ

せまい一本道で出会った二台の車で例えると、分かりやすいかもしれません。どちらも「相手が先に下がってくれたら進める」と思って動かずにいると、いつまでたっても両方止まったままです。デッドロックもこれと同じで、お互いが相手の道ゆずりを待ち続けて、二つとも進めなくなった状態です。

✅ まず覚えるポイント

  • 互いに相手のロック解放を待ち合い、両方が止まる膠着状態です
  • ロックは、同時の書き換えからデータを守る「鍵」の仕組みです
  • 待ち合いの輪ができると、どちらも先へ進めません
  • データベースは検出して、片方を中断することが多いです
  • ロックの順番をそろえると、起きにくくできます

🧭 よくある勘違い

デッドロックが起きたら手で直すしかないの?

そうとは限りません。多くのデータベースは待ち合いの輪を自動で見つけて、片方の処理を中断してくれます。中断された側はやり直しになるので、アプリ側で「少し待って再実行する」しくみを入れておくと、人手をかけずに復帰できることが多いです。

ロックさえなければデッドロックは起きないの?

ロックをなくせば取り合いは消えますが、今度は同時の書き換えでデータが壊れる危険が出てきます。ロックはトラブルの原因ではなく、データを守るための仕組みです。問題はロックそのものより、かける順番や持ち続ける時間のほうにあると考えると正確です。

🧩 関連して覚えると楽な言葉

  • トランザクション: ひとまとまりの処理。デッドロックは、この処理どうしの待ち合いで起きます
  • ACID: トランザクションが守るべき性質。ロックはこれを保つための手段です
  • RDB(リレーショナルデータベース): 表でデータを扱う仕組み。ロックの主な舞台です
  • スレッド: 同時に走る処理の単位。並行して動くからこそ取り合いが生まれます

🏁 ひとことでまとめ

二つの処理が「相手が鍵を手放すのを待つ」状態で固まり、どちらも動けなくなるのがデッドロックです。順番をそろえる工夫と、止まったらやり直す備えで付き合っていきます。