독자-저자 문제

전산학에서 독자-저자 문제(readers-writers problem)란 여러 명의 독자와 저자들이 하나의 저장 공간(버퍼)을 공유하며 이를 접근할 때 발생하는 문제이다. 독자는 공유 공간에서 데이터를 읽어온다. 여러 명의 독자가 동시에 데이터를 읽어오는 것이 가능하다. 저자는 공유 공간에 데이터를 쓴다. 한 저자가 공유 공간에 데이터를 쓰고 있는 동안에는 그 저자만 접근이 가능하며, 다른 독자들과 저자들은 접근할 수 없다.

 문제 해결 
세마포어 등을 활용하여 문제를 해결할 수 있다.

 방법 
 변수
 readcount : 현재 버퍼에 접근 중인 독자의 수를 나타낸다. (초기값=0)
 wrt : 저자들 사이의 관계를 통제한다. 즉, 동기화한다. (초기값=1)
 mutex : readcount와 wrt에 접근하는 것이 원자적으로 수행될 수 있도록 하는 세마포어 (초기값=1)
 저자 프로세스
 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);

 같이 보기 
 생산자-소비자 문제

분류:병행성