Problem čitalaca i pisaca
U informatici, problem čitalaca i pisaca je primer čestog problema u oblasti konkurentnog programiranja. Postoje bar tri varijacije problema u kojima veliki broj konkurentnih niti može da pristupi deljenom resursu u isto vreme. Jedna grupa niti može da vrši operaciju čitanja, a druga operaciju upisa, uz ograničenje da nijedna nit ne sme da vrši ni čitanje ni upis, ako u isto vreme druga nit vrši operaciju upisa u isti deljeni resurs.
Problem je prvi formulisao i rešio Pi Džej Kurtois 1971. godine.[1]
Opis problema Uredi
Postoje dva tipa procesa, čitaoci i pisci, koji mogu da pristupaju jednom zapisu (deljenom resursu). Čitaoci mogu samo da čitaju sadržaj zapisa, a pisci mogu i da ga čitaju i da ga menjaju. Da ne bi došlo do neregularne situacije u kojoj zapisu istovremeno pristupa više pisaca ili istovremeno pristupaju i pisci i čitaoci, pisci imaju pravo ekskluzivnog pristupa. Sa druge strane, dozvoljeno je da više čitalaca istovremeno pristupa zapisu.[2]
Primer rešenja Uredi
Primer rešenja primenom semafora u konkurentnom Paskalu, kod koga je izbegnuto izgladnjivanje, pod uslovom da je ograničavajući semafor enter pravedan:[3]
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.
Vidi još Uredi
Reference Uredi
- ^ Taubenfeld, Gadi (2006). Synchronization Algorithms and Concurrent Programming. Pearson Education. str. 301.
- ^ Radivojević, Zaharije; Ikodinović, Igor; Jovanović, Zoran (2018). Konkurentno i distribuirano programiranje (drugo izdanje). Akademska misao. str. 46.
- ^ Radivojević, Zaharije; Ikodinović, Igor; Jovanović, Zoran (2018). Konkurentno i distribuirano programiranje (drugo izdanje). Akademska misao. str. 48, 49.
Literatura Uredi
- Radivojević, Zaharije; Ikodinović, Igor; Jovanović, Zoran (2018). Konkurentno i distribuirano programiranje (drugo izdanje). Akademska misao, Beograd.
Spoljašnje veze Uredi
- Opis algoritma za treći problem čitalaca i pisaca, (jezik: engleski)