OS

경쟁 조건(Race Condition)이란?

둠치킨 2025. 6. 24. 19:42

경쟁 조건(Race Condition)이란?

경쟁 조건(Race Condition)은 둘 이상의 스레드 또는 프로세스가 동시에 동일한 공유 자원에 접근할 때,
실행 순서나 타이밍에 따라 프로그램의 결과가 달라지는 현상을 말한다.

이러한 현상은 공유 자원에 대한 접근이 적절히 동기화되지 않았을 때 발생하며,
예상치 못한 동작, 논리 오류, 데이터 손상 등으로 이어질 수 있다.


경쟁 조건의 특징

  • 멀티스레드 또는 멀티프로세싱 환경에서 주로 발생
  • 재현이 어렵고 디버깅이 매우 까다로운 대표적인 동시성 버그
  • 프로그램 테스트 중에는 잘 나타나지 않다가 실제 환경에서 간헐적으로 터지는 경우가 많음
  • 공유 자원: 변수, 메모리, 파일, 소켓 등

경쟁 조건 예시

이전 글 "임계영역이란?"에 나오는 카운터 예제 참고.


경쟁 조건 해결 방법

경쟁 조건을 방지하려면 공유 자원 접근을 동기화(synchronization)해야 한다. 이를 위한 대표적인 기법은 다음과 같다.

1. 뮤텍스, 2. 세마포어, 3. 스핀락, 4. std::atomic 등. 자세한 내용은 동기화 객체에 대한 포스트에서 다룰 예정이다.