질문 174 · 실전 면접 답변
교착 상태(Deadlock)가 발생하는 네 가지 필요조건과 이를 예방하는 방법은 무엇인가요?
이렇게 답해 보세요 (핵심 답변)
교착 상태는 실행 주체들이 서로 상대방이 점유한 자원을 기다리느라 아무도 진행하지 못하는 상태입니다. 고전적 자원 모델에서는 상호 배제, 점유와 대기, 비선점, 순환 대기라는 네 가지 필요조건이 동시에 성립해야 발생합니다. 이를 예방하려면 모든 스레드가 잠금(Lock)을 항상 정해진 같은 순서로만 획득하도록 강제해 순환 대기를 깨거나 필요한 자원을 한 번에 획득하는 방식을 쓰며, 이때 처리 효율과 구현 제약을 함께 고려합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 네 가지 조건은 개별적으로는 충분조건이 아니며, 넷 중 하나만 제거해도 고전적인 교착 상태 고리를 끊을 수 있습니다.
- 잠금 대기 타임아웃(Timeout)은 무응답 상태를 벗어나게 돕지만, 이미 변경한 상태를 안전하게 되돌리는 롤백과 재시도 정책이 함께 필요합니다.
면접에서 자주 하는 실수
단순히 작업이 느리거나 잠시 잠금을 기다리는 상태까지 모두 교착 상태(Deadlock)라고 부르면 안 됩니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 174번을 바탕으로 질문과 답변을 새로 정리했습니다.