운영체제

Race Condition (경쟁 상태)

탁재민 2024. 3. 21. 17:53

Race Condition (경쟁 상태)

두 개 이상의 프로세스 또는 스레드가 동시에 공유된 데이터에 접근하려고 할 때, 그 접근의 순서에 따라 실행 결과가 달라지는 상황
  • 임계 구역 (Critical Section) 해결 조건: 경쟁 상태를 발생시킬 수 있는 코드 구역
    • 상호 배제 (Mutual Exclusion): 임계 구역에는 한 번에 하나의 프로세스만 진입할 수 있어야 함
    • 진행 (Progress): 한 프로세스가 다른 프로세스의 진행을 방해해서는 안됨
    • 유한 대기 (Bounded Waiting): 프로세스가 임계 구역에 진입하기 위해 대기하는 시간은 유한해야 함

세마포어 (Semaphore)

경쟁 상태를 방지하고, 프로세스 간 또는 스레드 간의 동기화를 위해 사용되는 두 개의 원자적 함수로 조작되는 정수 변수
  • P(): 세마포어의 값을 감소, 만약 세마포어의 값이 0이라면 세마포어의 값이 0보다 커질 때까지 프로세스를 대기 시킴
  • V() 연산: 세마포어의 값을 증가, 대기 중인 프로세스 중 하나를 깨워 실행 상태로 만듦

뮤텍스 (Mutex)

상호 배제(Mutual Exclusion)의 약자로, 여러 스레드 또는 프로세스가 공유 자원에 동시에 접근하는 것을 방지하는 동기화 메커니즘
  1. Lock(): 스레드가 임계 구역에 진입하기 전에 뮤텍스를 잠금 상태로 만듦, 만약 뮤텍스가 이미 잠겨있다면, 뮤텍스가 해제될 때까지 대기
  2. Unlock(): 임계 구역의 작업을 완료한 스레드는 뮤텍스를 해제하여 다른 스레드가 임계 구역에 접근할 수 있도록 만듦