데드락을 감지한다. 데드락을 예방하지 않고 탐지하면 그때 복구하는 방식이다.
자원할당 그래프와 비슷한 wait-for graph를 사용한다. 리소스 노드들에 있는 edge들을 제거하면서 프로세스들 간의 edge 하나로 합친다.
Pi -> Pj : Pi가 필요한 리소스를 release하기를 기다림.
Pi -> Pj 와 Pi -> Rq & Rq -> Pj 는 같다. 전자는 wait-for이고 후자는 자원할당이다.
만약 wait-for그래프에서 cycle를 형성하게 되면 데드락이 발생한다.
여러개의 자원에서는 wait-for 그래프 전략이 적용되지 않는다.
따라서 detection algorithm를 사용한다. 전체 작업이 완료되는 프로세스의 모든 가능한 할당 순서를 확인한다.
avoidance와 마찬가지로 사용가능한 자원의 개수와 프로세스가 요청하는 자원의 개수를 따져서 끝낼 수 있는 프로세스를 찾는다.
safe sequence는 <P0, P2, P3, P1, P4> 이다.
만약 프로세스 P2가 자원 각각 0, 0, 1개를 요청한다면 데드락이 발생한다. P0이 끝나면 진행이 되지 않기 때문이다.