Chandy –Misra–Haasアルゴリズムのリソースモデルは、分散システムにおけるデッドロックをチェックします。これは、K. Mani Chandy、Jayadev Misra、およびLaura M. Haasによって開発されました。
単一のシステム(コントローラ)で実行されるn 個のプロセスP 1、P 2、P 3、P 4、P 5、 ... 、P nを考えます。 P 1がP 2に依存し、P 2がP 3に依存し、 ...およびP n−1 がP nに依存する場合、 P 1はP nに局所的に依存します。つまり、、 それからローカルに依存しているP 1 が局所的に自身に依存していると言われるのは、 P nに局所的に依存し、かつP n がP 1に依存している場合である。、 それから局所的に自己依存している。
このアルゴリズムは、probe(i,j,k) と呼ばれるメッセージを使用して、プロセスP jのコントローラからプロセスP kのコントローラにメッセージを転送します。このメッセージは、デッドロックが発生したかどうかを判断するために、プロセスP iによって開始されたメッセージを指定します。各プロセスP j は、依存するプロセスに関する情報を含むブール配列dependentを保持します。初期状態では、各配列の値はすべて「false」です。
プローブは送信前に、P jがローカルに自身に依存しているかどうかを確認します。依存している場合は、デッドロックが発生します。そうでない場合は、 P jとP kが異なるコントローラにあり、ローカルに依存しており、P j がP kによってロックされているリソースを待機しているかどうかを確認します。すべての条件が満たされると、プローブが送信されます。
受信側では、コントローラはプロセスP kがタスクを実行しているかどうかを確認します。実行している場合は、プローブを無視します。そうでない場合は、プロセスP kからプロセスP jへの応答を確認し、依存プロセスk ( i) が偽であることを確認します。確認後、依存プロセス k (i) に真を割り当てます。次に、 k と i が等しいかどうかを確認します。両者が等しい場合はデッドロックが発生し、そうでない場合は、プローブを次の依存プロセスに送信します。
擬似コードでは、アルゴリズムは次のように動作します。[ 1 ]
P jがローカルに自身に 依存している場合はデッドロックを宣言する 。 そうでない場合はすべてのP j、P kに対して、 (i) P iは局所的にP jに依存します。 (ii)P jは ' P kを待っており、 (iii)P jとP kは異なるコントローラ上にある。 プローブ(i, j, k)をP kのホームサイトに送信する。
(i) P kがアイドル状態またはブロックされている場合 (ii)従属変数k(i)=偽、 (iii) P k がP j へのすべての要求に応答していない場合は、 「依存関係」を開始し、 「k」 (i) = true; k == i の場合はP iがデッドロック状態である ことを宣言し、そうでない場合はすべてのP a、P bに対して、 (i) P kは局所的にP aに依存する。 (ii)P aは ' P bを待っており、 (iii)P a、P bは異なるコントローラ上にある。 プローブ(i、a、b)をP bのホームサイトに送信する。

P 1 はデッドロック検出を開始します。C 1 は、P 2 がP 3に依存していることを示すプローブを送信します。C 2はメッセージを受信すると、 P 3がアイドル状態かどうかを確認します。P 3はローカルにP 4に依存しているためアイドル状態であり、依存3 (2)をTrue に更新します。
上記のように、C 2 はC 3にプローブを送信し、C 3 はC 1にプローブを送信します。C 1 では、 P 1はアイドル状態であるため、依存関係1 (1)をTrue に更新します。したがって、デッドロックが宣言されます。
仮にコントローラーとプロセス、最大デッドロックを検出するにはメッセージの交換が必要であり、遅延はメッセージ。[ 2 ]