엔지니어 블로그

[OS] 멀티 스레딩 환경의 동기화 본문

글공부

[OS] 멀티 스레딩 환경의 동기화

안기용 2025. 4. 1. 18:48

멀티스레딩 환경의 Race Condition과 동기화 방법

Race Condition이란?

멀티스레딩 환경에서는 Race Condition(경쟁 상태)이 발생할 수 있습니다. 이는 여러 프로세스나 스레드가 동시에 같은 데이터를 조작할 때, 접근 순서나 타이밍에 따라 작업의 결과가 달라질 수 있는 현상을 말합니다.

동기화(Synchronization)의 개념

동기화는 여러 프로세스나 스레드가 동시에 실행되더라도 공유 데이터의 일관성을 유지하기 위한 작업입니다.

임계 영역(Critical Section)

데이터 일관성을 보장하기 위해 단 하나의 프로세스 또는 스레드만 진입해 실행 가능한 영역을 임계 영역(Critical Section)이라고 합니다. 임계 영역 진입을 위한 상호 배제(Mutual Exclusion)를 구현할 필요가 있습니다.

do {
    acquire lock
    critical section
    release lock
}
    

Lock의 종류와 특징

  • 스핀락(Spin Lock): lock을 획득할 때까지 while 반복문을 계속 돌며 대기하는 방식입니다. CPU 리소스를 지속적으로 소모해 오버헤드가 큽니다.
  • 뮤텍스(Mutex): lock 획득이 가능할 때까지 스레드가 휴식 상태에 들어가며 대기하는 방식입니다. CPU 자원을 효율적으로 관리할 수 있습니다.
  • 세마포어(Semaphore): 뮤텍스와 비슷하지만, 작업의 의존성과 순서가 반영된 동기화가 가능합니다. lock 해제는 소유자 외에도 다른 스레드에서 가능합니다.

뮤텍스의 우선순위 상속(Priority Inheritance)

뮤텍스는 우선순위 상속이라는 기능을 통해 우선순위 차이로 인한 작업 지연을 해결합니다. 우선순위 상속은 다음과 같은 흐름으로 동작합니다.

[단계 1: 기본 상태]
(높은 우선순위) P1 → Lock 요청 (대기 중)
        ↓
(낮은 우선순위) P2 → Lock 획득, 작업 중 (임계 영역)

↓ 우선순위 상속 발생 ↓

[단계 2: 우선순위 상속 후]
(높은 우선순위) P1 → Lock 요청 (대기 중)
        ↓
(높아진 우선순위) P2 (임시로 우선순위가 P1과 같아짐) → Lock 보유 및 신속히 작업 처리

↓ 작업 완료 후 Lock 반환 ↓

[단계 3: Lock 반환 후]
P2 → Lock 반환 및 원래 우선순위 복구 (낮은 우선순위로 돌아감)
        ↓
P1 → Lock 획득, 임계 영역 진입 및 작업 수행

뮤텍스와 세마포어 선택 기준

  • 상호 배제만 필요한 상황 → 뮤텍스 선택
  • 실행 순서 동기화가 필요한 상황 → 세마포어 선택

 

 

* 본 내용을 아래 영상을 참고하여 작성한 내용입니다.

https://www.youtube.com/watch?v=gTkvX2Awj6g&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&index=5