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을 해제할 수 있다.
'CS > Operating System' 카테고리의 다른 글
메모리 구조 (0) | 2023.04.03 |
---|---|
운영체제와 인터럽트 (0) | 2023.04.03 |
프로세스 vs 스레드, 멀티프로세스 vs 멀티스레드 (0) | 2023.03.24 |
Blocking vs Non-Blocking & Sync vs Async (0) | 2023.03.24 |