Classical Problems of Synchronization
- Bounded-Buffer problem
- Readers and Writers Problem
- Dining-Philosophers Problem
Bounded-Buffer Problem 유한 버퍼 문제
- 생산자-소비자 문제

- 생산자, 소비자의 프로세스가 존재하는데, 어느 생산자 프로세스가 버퍼 중 빈 공간에 데이터를 쓰려할 때, interrupt가 발생하여 다른 프로세스한테 공유 자원이 넘어가 다른 프로세스가 해당 공간에 데이터를 쓰려할 때 문제가 발생한다.
- semaphore를 통해 해결

Readers-Writers Problem 독자-저자 문제
- 독자(readers): 데이터를 읽는 것만 가능
- 저자(writers): 데이터를 읽고 쓰기 가능
문제점
- 많은 독자들은 한번에 읽을 수 있다.
- 저자는 같은 시간에 오직 한 명만 공유 자원에 접근할 수 있다.
- semaphore를 통해 해결
- readcount: 현재 버퍼에 접근 중인 독자의 수를 나타낸다. (초기값=0)
- wrt: 저자들 사이의 관계를 통제한다. 즉, 동기화한다. (초기값=1)
- mutex: readcount와 wrt에 접근하는 것이 원자적으로 수행될 수 있도록 하는 세마포어 (초기값=1)

Dining-Philosophers Problem 철학자 식사 문제

- 5명의 철학자가 있고 밥을 먹으려면 2개의 젓가락을 집어야한다.
- 만약 모두가 왼쪽에 있는 젓가락을 집는다면, 모두가 밥을 먹을 수 없다.
- 철학자들이 젓가락을 내려놓지 않는다면, 이 문제는 해결될 수 없음 -> deadlock
Linux Synchronization
- 리눅스는 제공한다
- Semaphores -> block & wakeup
- Spinlocks -> busy waiting