[OS] Race Condition과 Mutual Exclusion

2023. 5. 29. 01:04·IT/CS

Race Condition

  • 경쟁 상태
  • 여러 스레드가 공유된 자원에 동시에 접근하여 그 순서와 타이밍에 따라 결과가 달라지는 상황을 말한다.
  • 이런 경우, 실행할 때마다 다른 결과를 얻는다.
  • 컴퓨터의 작동에서 일반적으로 발생하는 결정적 결과와 달리, 결과가 어떠할지 알지 못하거나 실행할 때마다 결과가 다른 경우를 비결정적(Indeterminate)인 결과라고 부른다.

Critical Section

  • 임계 영역
  • 멀티스레드가 같은 코드를 실행할 때 "경쟁 상태"이 발생하기 때문에, 이러한 코드 부분은 임계 영역(Critical Section)이라고 부른다.
  • 공유 자원에 접근하지만, 동시에 여러 스레드에서 실행되면 안 되는 코드 부분이다.

Mutual Exclusion

  • 상호 배제
  • 동기화 기법의 하나
  • 락이나 세마포어 등을 사용하여 구현할 수 있다.
  • 동시에 실행되는 여러 개의 스레드나 프로세스가 공유된 자원에 접근할 때, 한 번에 하나의 스레드 또는 프로세스만이 접근할 수 있도록 제한하는 개념이다.
  • 즉, 상호 배제를 통해 여러 스레드가 동시에 같은 자원을 수정하거나 접근하는 것을 방지하여 데이터의 일관성과 정확성을 보장한다.
    • 이를 통해 동시성 문제인 Race Condition을 방지하고, 안전하게 공유 자원을 사용할 수 있다.
  • 상호 배제를 구현할 때는 데드락이 발생할 수 있으므로, 이를 고려하여 설계하고 검증해야 한다.

상호 배제 기법

데이터 일관성을 유지하고, 경쟁 상태를 방지하기 위한 상호 배제 기법들이 존재한다.

  1. 락(Lock)과 세마포어(Semaphore): 락과 세마포어는 가장 일반적인 상호 배제 메커니즘이다. 락은 단일 스레드만이 특정 자원에 접근할 수 있도록 하는 동기화 객체이다. 세마포어는 동시에 접근 가능한 스레드 수를 제어하여 상호 배제를 달성한다.
  2. 뮤텍스(Mutex): 뮤텍스는 락의 한 유형으로, 상호 배제를 위해 사용된다. 뮤텍스는 한 번에 하나의 스레드만이 잠금(lock)을 획득하고 접근할 수 있도록 보장한다.
  3. 원자적 연산(Atomic Operations): 원자적 연산은 하나의 연산으로 인식되어 동시에 접근되는 상황에서 데이터의 일관성과 상호 배제를 보장한다. 원자적 연산은 스레드 간의 경쟁 상태(Race Condition)를 피하는 데 도움이 된다.
  4. 조건 변수(Condition Variable): 조건 변수는 스레드의 실행 흐름을 제어하고 상호 배제를 구현하는 데 사용된다. 스레드는 조건 변수를 사용하여 특정 조건을 기다리거나 신호를 보내는 방식으로 상호 배제를 달성할 수 있다.

'IT > CS' 카테고리의 다른 글

[네트워크] 웹소켓(WebSocket)  (0) 2023.07.07
백엔드 Node.js를 쓰는 이점  (0) 2023.07.05
[OS] 멀티스레딩(Multi-Threading)  (0) 2023.05.29
[OS] 운영체제 개요  (0) 2023.05.28
[OS] 동시성과 병렬성  (0) 2023.05.26
'IT/CS' 카테고리의 다른 글
  • [네트워크] 웹소켓(WebSocket)
  • 백엔드 Node.js를 쓰는 이점
  • [OS] 멀티스레딩(Multi-Threading)
  • [OS] 운영체제 개요
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (576)
      • 혼잣말 (88)
      • TIL (3)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (169)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (40)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    글리치해커톤
    프로그래머스
    센디
    알고리즘
    docker
    핀토스
    크래프톤정글
    졸업과제
    리액트
    MailBadara
    블록체인
    딥러닝
    Pint OS
    나만무
    코드프레소
    RNN
    Flutter
    해커톤
    부산대
    NEAR Protocol
    pintos
    OS
    JavaScript
    사이드프로젝트
    파이썬
    머신러닝
    니어프로토콜
    react
    자바스크립트
    numpy
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
[OS] Race Condition과 Mutual Exclusion
상단으로

티스토리툴바