bounded-buffer problems은 공유 리소스에 대한 액세스의 전형적인 예시입니다.
버퍼가 가득 차 있으면 producers는 버퍼를 block하고
버퍼가 비어있으면 customer는 버퍼를 block합니다.
Readers-Writers Problem
여러 명의 독자와 저자들이 하나의 저장 공간(버퍼)을 공유하며 이를 접근할 때 발생하는 문제이다. 독자는 공유 공간에서 데이터를 읽어온다. 여러 명의 독자가 동시에 데이터를 읽어오는 것이 가능하다. 저자는 공유 공간에 데이터를 쓴다. 한 저자가 공유 공간에 데이터를 쓰고 있는 동안에는 그 저자만 접근이 가능하며, 다른 독자들과 저자들은 접근할 수 없다.
- 변수
- 저자 프로세스
wait(wrt); // 임계구역에 들어가기 위해 허가가 나기를 기다린다. ... 쓰기 작업 수행 ... signal(wrt); // 임계구역에서 빠져나왔음을 알린다.
- 독자 프로세스
wait(mutex); readcount++; // 독자 수 1 증가 if readcount = 1 wait(wrt); // 쓰고 있는 저자가 없을 때까지 기다린다. signal(mutex); ... 읽기 작업 수행 ... wait(mutex); readcount--; // 독자 수 1 감소 if readcount = 0 signal(wrt); // 독자가 없다면 이를 알린다. signal(mutex);
Dining-Philosophers Problem Algorithm
There are three states of philosopher : THINKING, HUNGRY and EATING. Here there are two semaphores : Mutex and a semaphore array for the philosophers. Mutex is used such that no two philosophers may access the pickup or putdown at the same time. The array is used to control the behavior of each philosopher. But, semaphores can result in deadlock due to programming errors.
참조
[1] - https://ko.wikipedia.org/wiki/%EB%8F%85%EC%9E%90-%EC%A0%80%EC%9E%90_%EB%AC%B8%EC%A0%9C
[2] - https://www.geeksforgeeks.org/dining-philosopher-problem-using-semaphores/