LuAITools.com
提交工具
🧲AI
みんな待って、誰も動かない

デッドロック

複数のエージェントが互いの持つリソースや行動を待ち合い、誰も動けずシステム全体が固まる状態です。

デッドロックって何?

狭い入り口で2人が譲り合い、「どうぞ」「いや、そちらから」と言い合ったまま、どちらも通れない——。デッドロック(Deadlock)はエージェント版のそれ。複数のエージェントが互いの持つリソースや動作を待ち合い、「あなた待ち、わたし待ち」の膠着状態に陥り、永遠に進みません。

どう起きるのか

リソースを離さない
エージェントAがファイルXをロックしてYを使いたい、エージェントBがYをロックしてXを使いたい。AはBがYを離すのを待ち、BはAがXを離すのを待つ——結び目です。
相手の先の行動を待つ
2つのエージェントが互いの返事を待って続行しない。結果、両方とも待ちぼうけ。
循環依存
3つ以上のエージェントが輪になり、それぞれが次を待つ。出口がありません。

どう見つけるか

典型的な症状は、進捗バーが止まる、ログが「待機中」だらけになる、リクエストがタイムアウトを繰り返す。監視システムは「誰が誰を待つか」のグラフを作り、循環がないか検査できます。

防ぐ・壊すには

ロックの順番を揃える
全エージェントに同じ順序でリソースを要求させ、待ちの交差を防ぎます。
タイムアウトを設ける
取れなければ諦める、再試行する、報告する。無限に待たない。
強制的に中断
完全に固まったら、待っている側を1つ止めて環を断ち切ります。
共有を減らす
できるだけ各エージェントにローカルなリソースを使わせ、取り合いを減らします。

まとめ:デッドロックは、エージェント同士が「相手が先に動くのを待ち合い」、誰も動けなくなることです。

コメント