«« ( Date ) »» // «« ( Thread ) »» // drs - 2006

Re: pitanje, zad. 58

by Nikola Mihajlović
nedelja, 29. januar 2006 - 03:13.


andrejad <andrejad@sezampro.yu> wrote:
tacno! u pravu si, to sam zaboravio...
samo me jos zanima zasto ce da bude lose i ako out-ujem
"mozete_citati" u inicijalizaciji? gde ce onda da se zaglavi?

Evo ovako... Nekoliko reader-a pređe preko
rd("mozete_citati");
i tu se malo uspore. Zatim writer uradi
in("mozete_citati");
rd("rd_num", 0);
Pošto reader-i još nisu inkrementirali rd_num ovo prođe i počne da piše. Oni reader-i koji su malopre prošli počnu da čitaju. Nije baš zaglavljivanje ali je loše.

Plus što sam ti još malo izmenio, ti imaš:
in("rd_num", 0);
To uzima tuple iz tuple space, posle neće imati ko da je vrati.

Kad uspeš da rešiš sve probleme u programu dobićeš ustvari rešenje sa vežbi :-)

rd() {
int i;
int rdn;
while(1) {
in("red", ?i);
out("red", ++i);
rd("mozete_citati");
in("rd_num", ?rdn);
out("rd_num", ++rdn);
citanje();
in("rd_num", ?rdn);
out("rd_num", ++rdn);
}
}

wr() {
int i;
while(1) {
in("red", ?i);
out("red", ++i);
in("mozete_citati");
in("rd_num", 0); // ceka da bude 0?
pisanje();
out("mozete_citati");
}
}

initialize() {
int i;
out("red", 0);
out("rd_num", 0);
for(i=0; i<MAX; i++) {
eval(rd());
eval(wr());
}
}