CS/운영체제

공유자원과 경쟁상태 그리고 임계영역

프론트엔드코린이 2025. 5. 29. 18:40

✅ 공유 자원 (Shared Resource)

여러 스레드나 프로세스가 동시에 사용하려는 자원

  • 예: 전역 변수, 파일, 프린터, 메모리 공간 등
  • 한 번에 하나만 안전하게 사용해야 함

🧠 비유: 한 식당에 포스기(POS기계)가 하나밖에 없다면,
직원 여러 명이 그걸 동시에 쓰려고 하면 충돌이 날 수 있어 → 이게 공유 자원이야.


✅ 경쟁 상태 (Race Condition)

여러 스레드가 동시에 공유 자원에 접근해서, 실행 순서에 따라 결과가 달라지는 문제

  • 공유 자원을 제대로 통제하지 않으면 발생
  • 결과가 예측 불가, 버그 발생 가능성 ↑

🧠 예시:
변수 count = 0

  • 스레드 A: count++
  • 스레드 B: count++
    → 동시에 실행되면 결과가 1이 될 수도 있고, 2가 될 수도 있어 → 이게 경쟁 상태야.

✅ 임계 영역 (Critical Section)

공유 자원에 접근하는 코드 영역
동시에 하나의 스레드만 접근할 수 있도록 보호해야 해

  • 경쟁 상태를 막기 위해 사용
  • 보통 lock, synchronized, mutex 같은 기법으로 보호

🧠 비유:
은행 ATM 1대를 사용할 때 한 명씩만 쓰도록 줄을 세우는 것 → 이 줄 선 영역이 임계 영역이야.


🔁 한 줄 요약

용어정의
공유 자원 여러 스레드/프로세스가 같이 쓰는 자원
경쟁 상태 동시에 접근해서 예상 못 한 결과가 생기는 상황
임계 영역 경쟁 상태를 초래하는 코드

 

 

 

✅ 경쟁 상태 관리의 중요성

* 여러 스레드나 프로세스가 동시에 공유 자원에 접근할 때, 실행 순서에 따라 예기치 못한 결과가 발생하는 걸 방지하기 위해서야.

  • 경쟁 상태를 방치하면 → 프로그램 동작이 불안정해짐
  • 데이터가 손상되거나, 꼬이거나, 예측할 수 없는 결과가 나옴
  • 특히 금융, 예약 시스템 등에서는 치명적인 오류 발생 가능

🧠 예시:

 
// 공유 자원 int balance = 10000; // 동시에 실행 Thread A: balance -= 1000; // 출금 Thread B: balance -= 2000; // 출금
  • 순서가 꼬이면 balance가 잘못 계산될 수 있음
  • 예: A, B가 동시에 실행 → 결과가 9000이 아닌 8000이 될 수도

그래서 경쟁 상태를 잘 관리해야 데이터가 신뢰할 수 있어!


✅ 데이터 정합성 (Data Consistency)

- 데이터가 논리적으로 맞고, 서로 모순되지 않는 상태

  • "전체적으로 봤을 때 데이터가 일관되고 맞는가?"
  • 예를 들어, 은행 잔고에서 입금한 금액 = 전체 계좌 증가분이어야 함

🧠 예시:

  • A가 B에게 1000원 송금했는데
    A의 잔고는 줄었고, B의 잔고는 그대로면? → ❌ 정합성 깨짐!

✅ 데이터 무결성 (Data Integrity)

데이터가 손상되지 않고, 올바르게 유지되는 성질

  • 저장된 데이터가 변조되지 않고, 유효한 값만 저장되었는가에 집중
  • 규칙 위반, 이상한 값 방지 (예: 나이 = -3 ❌)

🧠 예시:

  • 주민번호 형식은 반드시 13자리여야 한다
  • 이메일에는 @가 있어야 한다
    → 이런 규칙이 지켜지는 상태가 무결성이 있는 상태야

🔁 세 개의 개념 비교 요약

개념정의초점
경쟁 상태 관리 동시에 공유 자원 접근 시 오류 방지 순서/접근 관리
데이터 정합성 데이터들 간 논리적 일치 데이터 관계
데이터 무결성 유효한 형식, 값의 정확성 값 자체의 정확성