패스잇
CS 기초 · 중급

교착 상태(Deadlock)는 멀티스레드 애플리케이션에서 심각한 문제를 야기할 수 있습니다. 교착 상태의 4가지 필요조건을 설명하고, 이를 해결하거나 예방하기 위한 실용적인 방법들을 제시해주세요.

힌트 · 교착 상태는 상호 배제, 점유 및 대기, 비선점, 순환 대기라는 네 가지 조건이 동시에 만족될 때 발생합니다. 락 획득 순서 지정, 타임아웃, 자원 선점 등의 방법으로 예방 및 회피할 수 있습니다.

상호 배제점유 대기비선점순환 대기자원 할당 그래프

모범답안

교착 상태는 멀티스레드 환경에서 여러 스레드가 서로 필요한 자원을 점유하고 놓아주지 않아 무한정 대기하는 상황을 말합니다. 발생 조건은 크게 네 가지입니다.

첫째, 상호 배제입니다. 자원은 한 번에 하나의 스레드만 사용할 수 있어야 합니다. 둘째, 점유 및 대기입니다. 스레드가 자원을 점유한 상태에서 다른 자원을 기다려야 합니다. 셋째, 비선점입니다. 스레드가 점유한 자원은 강제로 뺏을 수 없습니다. 넷째, 순환 대기입니다. 스레드들이 서로 자원을 요구하며 순환 형태로 대기해야 합니다.

교착 상태를 해결하거나 예방하는 방법으로는 여러 가지가 있습니다. 가장 일반적인 방법은 락 획득 순서를 일관되게 유지하는 것입니다. 예를 들어, 항상 A 락을 먼저 획득하고 B 락을 획득하도록 규칙을 정하는 것이죠. 또한, 락 획득에 타임아웃을 설정하여 무한정 대기를 방지할 수 있습니다. 자원 할당 그래프를 활용하여 교착 상태 발생 가능성을 미리 탐지하고 회피하는 방법도 있습니다. 마지막으로, 자원 선점을 허용하는 것도 하나의 방법이 될 수 있지만, 자원 선점은 데드락 회피 방법 중 가장 복잡하고 오류 발생 가능성이 높습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 동시성 / 멀티스레딩 면접 질문

← 동시성 / 멀티스레딩 면접 질문 전체 보기