토픽 30 / 85·프로세스 동기화와 교착상태
경쟁 상태 (Race Condition)
경쟁 상태 (Race Condition)
둘 이상의 프로세스/스레드가 공유 자원에 동시 접근할 때, 실행 순서에 따라 결과가 달라지는 비결정적 현상 (관126 기출)
특징: 비결정적 결과, 재현 어려움(타이밍 의존), 간헐적 발생, 디버깅 난이도 높음
발생 조건: ① 공유 자원 존재 ② 동시 접근(병렬/인터리빙) ③ 최소 1개 쓰기 연산 ④ 동기화 미적용
유형
- •Check-then-act: 조건 확인 후 행동 사이에 다른 스레드가 상태 변경 (예: if(x==0) x=1에서 두 스레드 동시 통과)
- •Read-modify-write: 읽기→수정→쓰기 사이에 개입 (예: count++ 비원자적 연산, TOCTOU 취약점)
해결 기법
- •뮤텍스(Mutex): 임계 구역 상호 배제, 소유권 기반 잠금
- •세마포어(Semaphore): 카운터 기반 동기화, P/V 연산
- •원자적 연산(Atomic Operation): CAS(Compare-and-Swap), Test-and-Set, 하드웨어 지원
- •모니터(Monitor): 고수준 동기화, 자동 상호 배제(Java synchronized)
- •락프리(Lock-Free) 자료구조: CAS 기반, 블로킹 없는 동시성
비교
적용사례: 멀티스레드 카운터, 파일 동시 쓰기, TOCTOU 보안 취약점, 커널 자원 관리
연관: 동기화, 뮤텍스, 세마포어, 임계 구역, 원자적 연산