학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 178 · 실전 면접 답변

경쟁 상태(Race Condition)는 왜 발생하며 어떻게 재현하고 방지할 수 있나요?

이렇게 답해 보세요 (핵심 답변)

경쟁 상태는 여러 실행 흐름이 공유 상태에 접근할 때 실행 타이밍(Interleaving)에 따라 결과의 정확성이 달라지는 현상입니다. 단순한 카운터 증가(count++)도 읽기·계산·쓰기 단계로 나뉘므로 중간에 다른 스레드가 끼어들면 갱신을 잃어버릴 수 있습니다. 이를 방지하려면 불변식이 유지되어야 하는 임계 구역(Critical Section)을 찾아 잠금(Lock), 원자 연산, 메시지 전달 등으로 보호하고 가능한 교차 실행 순서를 검증해야 합니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 개별 연산 하나하나가 원자적이더라도 '조건을 검사한 뒤 행동하는(Check-then-Act)' 두 단계가 분리되어 있으면 그사이 상태가 바뀌어 버그가 생길 수 있습니다.
  2. 일반 테스트를 우연히 통과했다는 사실이 모든 스레드 교차 실행 순서에서 안전하다는 증거가 되지는 않습니다.

면접에서 자주 하는 실수

메모리 접근 충돌인 데이터 레이스(Data Race)와 더 넓은 의미의 논리적 경쟁 상태(Race Condition)를 완전히 똑같은 범위로 취급하면 안 됩니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 178번을 바탕으로 질문과 답변을 새로 정리했습니다.

← 운영체제