Deadlock xảy ra khi nhiều process chờ nhau giải phóng resource mà không process nào có thể tiếp tục.
Coffman
- xác định 4 điều kiện cần thiết đồng thời:
- Mutual Exclusion: resource chỉ 1 process dùng tại một thời điểm
- Hold and Wait: process giữ ít nhất 1 resource và chờ thêm resource khác
- No Preemption: resource không thể bị lấy bắt buộc
- Circular Wait: tồn tại chuỗi vòng P1→P2→...→Pn→P1 chờ nhau
Phòng tránh bằng cách phá vỡ một điều kiện: Lock Ordering (phá Circular Wait): luôn acquire lock theo thứ tự cố định — ví dụ database luôn lock bảng A trước bảng B. Trylock với timeout (phá Hold and Wait): nếu không lấy được lock sau timeout thì release tất cả và retry. Banker's Algorithm: OS kiểm tra trước khi cấp resource. Thực tế: Java synchronized blocks, Go channel patterns, và database transaction isolation level đều phải xử lý deadlock — PostgreSQL phát hiện deadlock và rollback một transaction.