경쟁 조건(Race Condition)이란?
경쟁 조건(Race Condition)은 둘 이상의 스레드 또는 프로세스가 동시에 동일한 공유 자원에 접근할 때,
실행 순서나 타이밍에 따라 프로그램의 결과가 달라지는 현상을 말한다.
이러한 현상은 공유 자원에 대한 접근이 적절히 동기화되지 않았을 때 발생하며,
예상치 못한 동작, 논리 오류, 데이터 손상 등으로 이어질 수 있다.
경쟁 조건의 특징
- 멀티스레드 또는 멀티프로세싱 환경에서 주로 발생
- 재현이 어렵고 디버깅이 매우 까다로운 대표적인 동시성 버그
- 프로그램 테스트 중에는 잘 나타나지 않다가 실제 환경에서 간헐적으로 터지는 경우가 많음
- 공유 자원: 변수, 메모리, 파일, 소켓 등
경쟁 조건 예시
이전 글 "임계영역이란?"에 나오는 카운터 예제 참고.
경쟁 조건 해결 방법
경쟁 조건을 방지하려면 공유 자원 접근을 동기화(synchronization)해야 한다. 이를 위한 대표적인 기법은 다음과 같다.
1. 뮤텍스, 2. 세마포어, 3. 스핀락, 4. std::atomic 등. 자세한 내용은 동기화 객체에 대한 포스트에서 다룰 예정이다.
'OS' 카테고리의 다른 글
다양한 OS 스케줄링 기법 (0) | 2025.06.24 |
---|---|
쓰레드와 프로세스 (Thread & Process) (0) | 2025.06.24 |
파편화 (Fragmentation) (0) | 2025.06.24 |
동기화 객체란? (0) | 2025.06.23 |
데드락(Deadlock)이란? (0) | 2025.06.23 |