CS/Operating System
[OS] Synchronization Problem
최블랙
2021. 12. 1. 23:07
Semaphore를 사용하여 race condition이 발생할 수 있는 문제들을 해결해보자!!!!!!
Bounded-Buffer Problem
Bounded-Buffer Problem은 앞의 포스팅에서 봤던 Producer-Consumer Problem을 말한다.
이때 아이템을 생성하고 소비하는 데이터가 공유되기 때문에 race condition이 발생했다.
👉 Semaphore를 사용하여 해결한다.
조건
- Producer와 Consumer 스레드를 가진다.
- N 크기의 buffer를 가진다.
- 공유 데이터
- Semaphore mutex = 1 → critical section
- Semaphore full = 0 → buffer 안의 아이템의 수
- Semaphore empty = N → buffer 안의 빈 슬롯 수
Producer thread
Consumer thread
Readers-Writers Problem
다수의 프로세스가 Read와 Write가 가능한 리소스를 공유하는 경우
→ 다중 Reader가 동시에 데이터에 접근하는 것은 문제가 없음
→ Writer는 오직 하나의 프로세스만 공유 데이터에 접근해야 함
👉 Semaphore를 사용하여 해결한다.
조건
- Reader와 Writer 스레드를 가진다.
- 공유 데이터
- 데이터
- Semaphore mutex = 1 → critical section
- Semaphore wrt = 1 → writer에 대한 mutual exclusion을 위함
- Integer readcound = 0 → reader 수
Writer thread
Reader thread
Dining Philosophers Ploblem
조건
- N명의 철학자와 N개의 젓가락이 있다.
- 먹기 위해서는 2개의 젓가락이 필요하다.
- 자리 기준 왼쪽 젓가락 먼저 집고 오른쪽 젓가락을 집어야 한다.
- 각 젓가락은 한 번에 한 명만 사용할 수 있다.
- 공유 데이터
- Semaphore chopstick[N] = 1
Philosopher thread
이 코드는 정상 작동하는 코드일까 ❔❔❔
위와 같이 wait() 다음 interrupt가 발생한다면 모든 사람이 본인 왼쪽의 젓가락을 점유한 채 오른쪽의 젓가락을 영원히 기다릴 것이다.
👉 deadlock이 발생할 수 있음!!