데드락 (Deadlock) — 둘 이상의 태스크가 서로가 쥔 락을 먼저 풀어주길 기다리며 진행 불가 상태에 빠진 현상. 중첩된 락을 서로 다른 순서로 획득하려 할 때 발생한다.
Circular Wait 예시
T1: Lock(S1) → S1 held by T1
T2: Lock(S2) → S2 held by T2
T1: Lock(S2) → waiting for S2 (held by T2)
T2: Lock(S1) → waiting for S1 (held by T1)결과: T1과 T2는 서로의 락을 무한히 기다린다.
예방 — 전체 락 순서 강제
Circular wait 조건을 원천 차단한다. 시스템 내 모든 락(자원)에 대해 전순서(total ordering)를 정하고, 모든 태스크가 정해진 순서대로만 락을 요청하도록 만든다.
예: 라는 고정 순서가 있으면, T1과 T2 둘 다 먼저 을 획득한 뒤 를 요청하므로 circular wait이 성립할 수 없다.