Deadlock(교착 상태) - 요약 정리

2025. 3. 26. 15:41프로그래밍/시스템

 

🧷 Deadlock(교착 상태) 요약 정리

✅ 정의

Deadlock(교착 상태)이란 두 개 이상의 프로세스(또는 스레드)가 서로 필요한 자원을 점유한 채,
서로가 자원을 반환하기를 무한히 기다리는 상태
를 말합니다.
외부 개입 없이 자연스럽게 진행이 불가능한 상태가 됩니다.


✅ 발생 조건 (Coffman의 네 가지 조건)

데드락은 아래 4가지 조건이 모두 충족될 때에만 발생합니다:

조건 설명
상호 배제 (Mutual Exclusion) 하나의 자원은 한 번에 하나의 프로세스만 사용할 수 있다
점유 대기 (Hold and Wait) 자원을 점유한 상태로 다른 자원을 요청하며 대기한다
비선점 (No Preemption) 점유 중인 자원을 강제로 회수할 수 없다
환형 대기 (Circular Wait) 프로세스들이 서로의 자원을 기다리며 원형 대기를 형성한다

✅ 유사 개념 비교

개념 정의 차이점
Deadlock 모든 프로세스가 자원을 점유한 채 서로 대기하며 멈춘 상태 진행이 아예 멈춤
Livelock 프로세스가 계속 상태를 바꾸지만 실제로 작업은 안 이루어짐 바쁘게 움직이나 실질적 진전 없음
Starvation (기아) 특정 프로세스가 자원을 계속 할당받지 못해 실행되지 못함 일부 프로세스만 피해를 봄

✅ 처리 전략

전략 설명
예방 (Prevention) 데드락 발생 조건 중 하나 이상을 사전에 제거
회피 (Avoidance) 데드락이 발생하지 않는 안전 상태만 유지 (예: 은행가 알고리즘)
탐지 (Detection) 데드락이 발생해도 탐지 후 대응
복구 (Recovery) 데드락 탐지 후 프로세스 종료, 자원 회수 등으로 해결

✅ 주요 알고리즘

알고리즘 목적 특징
자원 할당 그래프 (RAG) 탐지 자원/프로세스 간 관계를 그래프로 표현하여 사이클 여부 분석
은행가 알고리즘 (Banker’s Algorithm) 회피 안전 상태를 유지하면서 자원 요청 판단

✅ 실전 코딩 기법

  • 락 순서 고정: 자원 획득 순서 통일
  • 타임아웃 락 사용: 무한 대기 방지
  • 재시도 + 백오프: 충돌 완화
  • 로깅/모니터링: 운영 중 데드락 추적 가능

✅ 실무 팁

  • 완벽한 회피는 어렵지만, 구조적 예방 + 모니터링 + 복구 설계로 충분히 관리 가능
  • 중요 로직(결제, 저장 등)은 반드시 데드락 대비 설계를 적용할 것
  • 코드 리뷰 시 락 순서, 중첩, 해제 누락 등을 반드시 점검할 것