패스잇
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 코칭합니다.

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

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