본문 바로가기
Dev/Article

동시성 문제 - Race Condition(경쟁 조건)

by Luigi.yoon 2025. 3. 17.

Race Condition(경쟁 조건)은 두 개 이상의 프로세스나 스레드가 공유 자원에 동시에 접근하고, 그 접근 순서에 따라 결과가 달라지는 버그 또는 현상입니다.

보통 병렬 프로그래밍 환경(멀티스레딩, 멀티프로세싱 등)에서 발생하며, 적절한 동기화 메커니즘이 없다면 예기치 않은 결과를 초래할 수 있습니다.

 

30 에 +4, +5 연산을 각각 했는데 39가 되지 못하는 상황

 

 

항목 동기화 없음 (Race Condition 발생) 동기화 있음 (정상 처리)
공유 자원 접근 동시에 접근 가능 순차적으로 접근 (락, 세마포어 등)
결과 일관성 일관성 없음 (데이터 손실, 충돌 가능) 일관성 보장 (예상된 결과 도출)
디버깅 난이도 매우 어려움 (간헐적 재현, 환경에 따라 다름) 상대적으로 쉬움
성능 빠를 수 있으나 위험함 약간의 오버헤드 발생
예시 코드 상황 counter++와 같은 명령어가 원자적이지 않음 synchronized 블록이나 mutex로 보호함
사용 기술 없음 / 불완전한 보호 락(Mutex, Spinlock), 세마포어, 채널, 메시지 큐 등
발생 위치 예시 웹 서버 요청 처리, 멀티스레드 로그 기록 등 트랜잭션 처리, 공유 메모리 쓰기 등