У информатици, проблем читалаца и писаца је пример честог проблема у области конкурентног програмирања. Постоје бар три варијације проблема у којима велики број конкурентних нити може да приступи дељеном ресурсу у исто време. Једна група нити може да врши операцију читања, а друга операцију уписа, уз ограничење да ниједна нит не сме да врши ни читање ни упис, ако у исто време друга нит врши операцију уписа у исти дељени ресурс.

Проблем је први формулисао и решио Пи Џеј Куртоис 1971. године.

Опис проблема

Постоје два типа процеса, читаоци и писци, који могу да приступају једном запису (дељеном ресурсу). Читаоци могу само да читају садржај записа, а писци могу и да га читају и да га мењају. Да не би дошло до нерегуларне ситуације у којој запису истовремено приступа више писаца или истовремено приступају и писци и читаоци, писци имају право ексклузивног приступа. Са друге стране, дозвољено је да више читалаца истовремено приступа запису.

Пример решења

Пример решења применом семафора у конкурентном Паскалу, код кога је избегнуто изгладњивање, под условом да је ограничавајући семафор -{enter}- праведан:

program ReadersWriters; const Nreaders = ... //broj citalaca Nwriters = ... //broj pisaca

var rw, mutexR, enter : semaphore; nr : shared integer;

procedure Reader(i : 0..Nreaders-1); begin while (true) do begin //... wait(enter); wait(mutexR); nr := nr+1; if (nr = 1) then wait(rw); signal(mutexR); signal(enter); //procitaj zapis wait(mutexR); nr := nr-1; if (nr = 0) then signal(rw); signal(mutexR); //... end end;

procedure Writer(i : 0..Nwiters-1); begin while (true) do begin //... wait(enter); wait(rw); signal(enter); //upisi nesto u zapis signal(rw); //... end end;

begin init(rw, 1); init(mutexR, 1); init(enter, 1); nr := 0; cobegin Reader(0); //... Reader(Nreaders-1); Writer(0); //... Writer(Nwriter-1); coend end.

Види још

Проблем произвођача и потрошача Проблем нервозних пушача Проблем филозофа за ручком Паралелно израчунавање

Референце

Литература

Радивојевић, Захарије; Икодиновић, Игор; Јовановић, Зоран (2018). Конкурентно и дистрибуирано програмирање (друго издање). Академска мисао, Београд.

Спољашње везе Опис алгоритма за трећи проблем читалаца и писаца,

Категорија:Информатика