CS 기초 · 중급
멀티스레드 환경에서 발생할 수 있는 Race Condition(경쟁 상태)이 무엇인지 정의하고, 이러한 문제를 방지하기 위한 대표적인 방법들을 설명해주세요. 실제 코드에서 Race Condition이 발생하는 시나리오를 예시로 들어 설명할 수 있다면 더욱 좋습니다.
힌트 · 경쟁 상태는 여러 스레드가 공유 데이터에 동시에 접근하여 예상치 못한 결과를 초래하는 상황입니다. 락, 뮤텍스, 세마포어, 원자적 연산 등을 통해 방지할 수 있습니다.
Race ConditionCritical SectionMutexSemaphoreAtomic Operation
모범답안
"경쟁 상태(Race Condition)는 멀티스레드 환경에서 여러 스레드가 공유 자원에 동시에 접근하려 할 때, 접근 순서에 따라 결과가 달라지는 상황을 말합니다. 예를 들어, 두 스레드가 동시에 하나의 변수를 증가시키려 할 때, 예상과 달리 1만 증가하는 경우가 발생할 수 있습니다.
이러한 문제를 방지하기 위한 방법으로는 대표적으로 락(Lock) 또는 뮤텍스(Mutex)를 사용하는 것이 있습니다. 락을 사용하여 특정 코드 영역(Critical Section)에 하나의 스레드만 접근하도록 보장하는 것이죠. 세마포어는 락보다 더 일반적인 개념으로, 여러 개의 스레드가 동시에 접근 가능한 자원의 수를 제어할 수 있습니다. 또한, 간단한 연산의 경우 원자적 연산(Atomic Operation)을 사용하여 경쟁 상태를 피할 수 있습니다.
// 경쟁 상태 발생 예시
int counter = 0;
void increment() {
counter++; // 여러 스레드가 동시에 접근하면 문제 발생 가능
}
위 코드에서 increment() 메서드를 여러 스레드가 동시에 실행하면 counter 값이 예상과 다르게 나올 수 있습니다."
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 동시성 / 멀티스레딩 면접 질문
- 동기화 메커니즘으로 사용되는 '뮤텍스(Mutex)'와 '세마포어(Semaphore)'의 개념을 정의하고, 이 둘의 주요 차이점은 무엇인지 설명해 주세요.
- '데드락(Deadlock)'이란 무엇이며, 데드락이 발생하기 위한 4가지 필수 조건을 설명해 주세요.
- 뮤텍스와 세마포어는 동기화 메커니즘으로 사용됩니다. 두 메커니즘의 주요 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 예시를 들어 설명해주세요.
- 교착 상태(Deadlock)는 멀티스레드 애플리케이션에서 심각한 문제를 야기할 수 있습니다. 교착 상태의 4가지 필요조건을 설명하고, 이를 해결하거나 예방하기 위한 실용적인 방법들을 제시해주세요.
- 특정 언어(예: Java, C#)에서 `volatile` 키워드가 멀티스레딩 환경에서 어떤 역할을 하는지 설명해주세요. `volatile`이 보장하는 것과 보장하지 못하는 것을 구분하여 설명하고, `synchronized` 또는 `Atomic` 클래스와의 차이점을 언급해주세요.
- 스레드 풀(Thread Pool)을 사용하는 주된 이유와 이점이 무엇인지 설명해주세요. 스레드 풀의 크기를 결정할 때 고려해야 할 요소들과, 잘못된 스레드 풀 사용으로 발생할 수 있는 문제점들을 함께 설명해주세요.