Learning
토픽 87 / 111·병렬 처리 (Parallel Processing)

Race Condition (경쟁 상태)

Race Condition (경쟁 상태)

두 개 이상의 프로세스 또는 스레드가 공유 자원에 동시 접근할 때, 실행 순서(타이밍)에 따라 결과가 달라지는 비결정적 현상 (126회 출제)

목적: 공유 자원 접근 시 데이터 무결성 보장, 동시성 오류 방지, 시스템 안정성 확보

특징: 비결정적 결과, 재현 어려움, 타이밍 의존, 디버깅 난이도 높음

발생 조건: ① 공유 자원 존재 ② 동시 접근(병렬/인터리빙) ③ 최소 하나의 쓰기 연산 ④ 동기화 부재

유형

  • Check-then-act: 조건 확인 후 동작 사이에 상태 변경 (예: 파일 존재 확인 → 생성, TOCTOU 취약점)
  • Read-modify-write: 읽기-수정-쓰기가 원자적이지 않음 (예: count++ → Load/Add/Store 3단계)

HW 레벨 경쟁

  • 버스 경합(Bus Contention): 다수 장치가 동시에 버스 점유 시도, 버스 중재로 해결
  • 캐시 일관성(Cache Coherence): 멀티코어에서 동일 메모리에 대한 캐시 불일치, MESI/MOESI 프로토콜로 해결
  • 메모리 순서(Memory Ordering): CPU 재정렬로 인한 관찰 순서 차이, 메모리 배리어로 해결

SW 레벨 경쟁

  • 임계 구역(Critical Section): 공유 자원 접근 코드 영역, 상호 배제 필요
  • 데이터 레이스(Data Race): 동기화 없는 동시 메모리 접근(최소 1개 쓰기), C/C++ 미정의 동작
  • 고수준 경합: 비즈니스 로직 레벨의 경쟁 (예: 좌석 예약, 재고 차감)

해결 기법

장점: (해결 시) 데이터 무결성 보장, 예측 가능한 동작, 시스템 안정성

단점: 동기화 오버헤드, 성능 저하, 교착 상태 가능성, 설계 복잡성 증가

적용사례: 멀티스레드 프로그램, DB 동시 트랜잭션, 커널 자원 관리, 분산 시스템 합의

비교: Race Condition(비결정적 결과) vs Deadlock(영구 블록) vs Starvation(무한 대기)

연관: 뮤텍스, 세마포어, 캐시 일관성, 메모리 배리어, 원자적 연산, 우선순위 역전