변수의 기록

(CS 운영체제) 동기화 (기본) 본문

CS지식/운영체제 (Operating System)

(CS 운영체제) 동기화 (기본)

불광동 물주먹 2025. 4. 7. 00:54

2025년 04월 7일

LOCK 동기화 공부

 

✅ 1. 레이스 컨디션 (Race Condition)

여러 스레드(또는 프로세스)가 동시에 공유 자원에 접근할 때,
실행 순서에 따라 결과가 달라지는 예측 불가능한 상황

📌 예시 (공유 변수 증가):

int counter = 0;
Thread A: counter++;
Thread B: counter++;
 
  • 두 스레드가 거의 동시에 counter++를 실행하면,
    실제 결과는 1이 될 수도 있음 (정상은 2여야 함)

데이터의 일관성, 정확성이 깨짐


✅ 2. 동기화 (Synchronization)

여러 스레드나 프로세스가 공유 자원에 올바른 순서로 접근하도록 제어하는 것

  • 레이스 컨디션을 방지하기 위한 필수 메커니즘
  • 올바른 동기화 없이는 공유 자원 보호 불가능

락(lock), 세마포어(semaphore), 모니터(monitor) 등의 도구를 사용


✅ 3. 임계 영역 (Critical Section)

공유 자원에 접근하는 코드 구역으로,
동시에 하나의 프로세스 또는 스레드만 진입해야 함

  • 이 영역은 **Mutual Exclusion (상호 배제)**이 반드시 보장돼야 함

✅ Mutual Exclusion (상호 배제)

여러 스레드 중 오직 하나만 임계 영역을 사용할 수 있게 만드는 것

➡ 구현 방법: lock 사용

lock.lock(); // 진입 전 락
// 임계 영역
lock.unlock(); // 빠져나올 때 락 해제
 

✅ Critical Section Problem – 해결 조건 3가지


 

조건 설명
1. Mutual Exclusion (상호 배제) 동시에 하나만 임계 영역 진입 가능
2. Progress (진행) 어떤 프로세스도 임계 영역에 없으면, 진입 후보 중 하나가 반드시 진입 가능
3. Bounded Waiting (한정된 대기) 특정 프로세스가 락을 요청했을 때, 무한히 기다리는 일이 없도록 보장

 

 


✅ 요약 정리 플로우

공유 자원 → 레이스 컨디션 발생 가능
   ↓
동기화(Synchronization) 필요
   ↓
임계 영역 (Critical Section) 지정
   ↓
Mutual Exclusion으로 보호 (lock 등)
   ↓
락 구현 시 test_and_set 같은 atomic 연산 사용 가능