CS 기초 · 기초
'데드락(Deadlock)'이란 무엇이며, 데드락이 발생하기 위한 4가지 필수 조건을 설명해 주세요.
힌트 · 데드락은 두 개 이상의 스레드가 서로의 자원을 기다리며 무한히 블록되는 상태입니다. 상호 배제, 점유 및 대기, 비선점, 순환 대기가 필수 조건입니다.
상호 배제점유 대기비선점순환 대기자원 할당 그래프
모범답안
데드락은 두 개 이상의 스레드 또는 프로세스가 서로가 점유하고 있는 자원을 기다리면서 무한정 멈춰있는 상태를 말합니다. 마치 교착 상태에 빠진 것과 같죠.
데드락이 발생하려면 네 가지 필수 조건이 모두 충족되어야 합니다.
첫째, 상호 배제(Mutual Exclusion)입니다. 자원은 한 번에 하나의 스레드만 사용할 수 있어야 합니다.
둘째, 점유 및 대기(Hold and Wait)입니다. 스레드가 이미 자원을 점유한 상태에서 다른 자원을 기다려야 합니다.
셋째, 비선점(No Preemption)입니다. 스레드가 점유한 자원은 강제로 뺏을 수 없어야 합니다.
넷째, 순환 대기(Circular Wait)입니다. 스레드들이 자원을 서로 순환적으로 기다리는 관계가 형성되어야 합니다. 예를 들어, 스레드 A는 스레드 B가 가진 자원을 기다리고, 스레드 B는 스레드 A가 가진 자원을 기다리는 상황입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 동시성 / 멀티스레딩 면접 질문
- 멀티스레딩 환경에서 발생할 수 있는 '경쟁 조건(Race Condition)'이란 무엇이며, 어떤 상황에서 발생할 수 있는지 구체적인 예를 들어 설명해 주세요.
- 경쟁 조건을 방지하기 위해 사용되는 '임계 영역(Critical Section)'의 개념을 설명하고, 왜 임계 영역 설정이 중요한지 이야기해 주세요.
- 동기화 메커니즘으로 사용되는 '뮤텍스(Mutex)'와 '세마포어(Semaphore)'의 개념을 정의하고, 이 둘의 주요 차이점은 무엇인지 설명해 주세요.
- 뮤텍스와 세마포어는 동기화 메커니즘으로 사용됩니다. 두 메커니즘의 주요 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 예시를 들어 설명해주세요.
- 멀티스레드 환경에서 발생할 수 있는 Race Condition(경쟁 상태)이 무엇인지 정의하고, 이러한 문제를 방지하기 위한 대표적인 방법들을 설명해주세요. 실제 코드에서 Race Condition이 발생하는 시나리오를 예시로 들어 설명할 수 있다면 더욱 좋습니다.
- 교착 상태(Deadlock)는 멀티스레드 애플리케이션에서 심각한 문제를 야기할 수 있습니다. 교착 상태의 4가지 필요조건을 설명하고, 이를 해결하거나 예방하기 위한 실용적인 방법들을 제시해주세요.