질문 178 · 실전 면접 답변
경쟁 상태(Race Condition)는 왜 발생하며 어떻게 재현하고 방지할 수 있나요?
이렇게 답해 보세요 (핵심 답변)
경쟁 상태는 여러 실행 흐름이 공유 상태에 접근할 때 실행 타이밍(Interleaving)에 따라 결과의 정확성이 달라지는 현상입니다. 단순한 카운터 증가(count++)도 읽기·계산·쓰기 단계로 나뉘므로 중간에 다른 스레드가 끼어들면 갱신을 잃어버릴 수 있습니다. 이를 방지하려면 불변식이 유지되어야 하는 임계 구역(Critical Section)을 찾아 잠금(Lock), 원자 연산, 메시지 전달 등으로 보호하고 가능한 교차 실행 순서를 검증해야 합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 개별 연산 하나하나가 원자적이더라도 '조건을 검사한 뒤 행동하는(Check-then-Act)' 두 단계가 분리되어 있으면 그사이 상태가 바뀌어 버그가 생길 수 있습니다.
- 일반 테스트를 우연히 통과했다는 사실이 모든 스레드 교차 실행 순서에서 안전하다는 증거가 되지는 않습니다.
면접에서 자주 하는 실수
메모리 접근 충돌인 데이터 레이스(Data Race)와 더 넓은 의미의 논리적 경쟁 상태(Race Condition)를 완전히 똑같은 범위로 취급하면 안 됩니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 178번을 바탕으로 질문과 답변을 새로 정리했습니다.