T1은 먼저 A를 점유한 채 다음 작업으로 넘어갑니다.
각자 하나는 이미 잡고 있고,
다음 하나가 서로에게 묶이면 진행이 멈춥니다.
데드락의 핵심은 락이 모자란 것이 아니라, 락을 쥔 두 트랜잭션이 서로의 해제만 기다리는 원형 대기가 만들어진다는 점입니다.
리소스 A
T1이 보유 중
리소스 B
T2가 보유 중
T2도 B를 점유한 채 다음 작업을 진행하려고 합니다.
B가 더 필요함
B는 아직 T2가 쥐고 있으므로, T1은 락 해제를 기다리며 멈춥니다.
WAIT for LOCK(B)서로 대기
T1은 T2를 기다리고
T2는 다시 T1을 기다립니다.
T2는 다시 T1을 기다립니다.
누구도 먼저 끝나지 못해 현재 락을 놓지 못합니다.
A가 더 필요함
A는 아직 T1이 쥐고 있으므로, T2 역시 대기 상태에 들어갑니다.
WAIT for LOCK(A)
결과
두 트랜잭션 모두 COMMIT까지 진행하지 못하므로 락 해제가 일어나지 않습니다. 이처럼 서로가 가진 락을 서로 기다리며 영원히 빠져나오지 못하는 상태가 데드락입니다.