Race Condition(경쟁 조건)은 두 개 이상의 프로세스나 스레드가 공유 자원에 동시에 접근하고, 그 접근 순서에 따라 결과가 달라지는 버그 또는 현상입니다.
보통 병렬 프로그래밍 환경(멀티스레딩, 멀티프로세싱 등)에서 발생하며, 적절한 동기화 메커니즘이 없다면 예기치 않은 결과를 초래할 수 있습니다.
항목 | 동기화 없음 (Race Condition 발생) | 동기화 있음 (정상 처리) |
공유 자원 접근 | 동시에 접근 가능 | 순차적으로 접근 (락, 세마포어 등) |
결과 일관성 | 일관성 없음 (데이터 손실, 충돌 가능) | 일관성 보장 (예상된 결과 도출) |
디버깅 난이도 | 매우 어려움 (간헐적 재현, 환경에 따라 다름) | 상대적으로 쉬움 |
성능 | 빠를 수 있으나 위험함 | 약간의 오버헤드 발생 |
예시 코드 상황 | counter++와 같은 명령어가 원자적이지 않음 | synchronized 블록이나 mutex로 보호함 |
사용 기술 | 없음 / 불완전한 보호 | 락(Mutex, Spinlock), 세마포어, 채널, 메시지 큐 등 |
발생 위치 예시 | 웹 서버 요청 처리, 멀티스레드 로그 기록 등 | 트랜잭션 처리, 공유 메모리 쓰기 등 |
'Dev > Article' 카테고리의 다른 글
OLTP(Online Transaction Processing), OLAP(Online Analytical Processing) (0) | 2025.05.22 |
---|---|
관점 지향 프로그래밍 (Aspect-Oriented Programming; AOP) (0) | 2025.03.28 |
동시성 문제 - Deadlock(교착 상태) (0) | 2025.03.17 |
GitOps(Git-based Operations) (0) | 2025.03.17 |
DataOps(Data Operations) (0) | 2025.03.17 |