본문 바로가기
CS/Operating System

Race Condition

by jeounpar 2023. 3. 24.

Race Condition 발생 조건

1. 멀티프로세스/멀티스레드 환경

2. 두개 이상의 프로세스 또는 스레드가 같은 data에 접근할 때

 

Race Condition 이 발생하면 생기는 문제들

1. Mutual exclusion

-  두 개 이상의 프로세스 또는 스레드가 공용 데이터에 동시에 접근을 하는 것을 막아야 함

2. Deadlock

- 프로세스 또는 스레드가 각자 필요한 자원에 접근을 시도 할 때 서로 상대방의 작업이 끝나기만을 기다리는 상태

3. Starvation

- Deadlock 상태가 계속 지속되어 프로세스나 스레드가 더 이상 작업을 영구적으로 진행할 수 없는 상태

 

Race Condition 해결 방법

1. Mutex

- 공유 자원에 lock을 걸어 하나의 프로세스나 스레드만 접근 가능 하게 만듬

2. Semaphore

- 공유 자원에 lock을 걸어 하나 이상의 프로세스나 스레드만 접근 가능 하게 만듬

Counting Semaphores

- 세마포어의 카운트가 양의 정수값을 가지며 설정한 값 만큼만 프로세스나 스레드의 접근을 허용하고, 그 이상의 수가 자원에 접근하면 락이 실행

Binary Semaphore

- 세마포어의 카운트가 1인 상태로 Mutex처럼 사용할 수 있다

 

Mutex vs Semaphore

Mutex는 lock을 걸은 프로세스나 스레드만이 unlock이 가능하다. 하지만 Semaphore는 시그널을 사용하여 lock을 걸지 않은 프로세스나 스레드가 lock을 해제할 수 있다.