토픽 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(무한 대기)
연관: 뮤텍스, 세마포어, 캐시 일관성, 메모리 배리어, 원자적 연산, 우선순위 역전