Khác với avoidance, chiến lược detect-and-recover cho phép deadlock xảy ra rồi mới xử lý.
Phát hiện:
- Nếu mỗi loại tài nguyên chỉ có 1 thực thể: xây wait-for graph (tiến trình → tiến trình); có chu trình = deadlock.
- Nếu nhiều thực thể mỗi loại: dùng thuật toán giống safety của Banker để kiểm tra có chuỗi hoàn tất được không.
- Chạy định kỳ hoặc khi CPU utilization tụt bất thường (đánh đổi giữa chi phí quét và độ trễ phát hiện).
Phục hồi:
- Kết thúc tiến trình: giết toàn bộ tiến trình trong deadlock, hoặc giết lần lượt từng cái tới khi hết chu trình (chọn nạn nhân theo chi phí thấp nhất).
- Preempt tài nguyên: cướp tài nguyên từ một tiến trình trả cho tiến trình khác, thường kèm rollback tiến trình bị cướp về checkpoint. Rủi ro starvation nếu luôn chọn cùng một nạn nhân → cần đưa số lần rollback vào tiêu chí chọn.