The
algorithm uses a message called probe(i,j,k) to transfer a message from controller of process
Pj to controller of process
Pk. It specifies a message started by process
Pi to find whether a deadlock has occurred or not. Every process
Pj maintains a boolean array
dependent which contains the information about the processes that depend on it. Initially the values of each array are all "false".
Controller sending a probe Before sending, the probe checks whether
Pj is locally dependent on itself. If so, a deadlock occurs. Otherwise it checks whether
Pj, and
Pk are in different controllers, are locally dependent and
Pj is waiting for the resource that is locked by
Pk. Once all the conditions are satisfied it sends the probe.
Controller receiving a probe On the receiving side, the controller checks whether
Pk is performing a task. If so, it neglects the probe. Otherwise, it checks the responses given
Pk to
Pj and
dependentk(i) is false. Once it is verified, it assigns true to
dependentk(i). Then it checks whether k is equal to i. If both are equal, a deadlock occurs, otherwise it sends the probe to next dependent process. == Algorithm ==