[15 p] Sekoilua
semaforeilla
Allaoleva
ratkaisu tuottaja-kuluttaja -ongelmaan ei toimi oikein.
char buffer[n];
int start = 0, end = 0;
sem empties = n, fulls = 1, turn = 0;
process Producer[i=1 to M] { process Consumer[i=1 to N] {
char data; char result;
.... .....
while (true) { while (true) {
..... .....
produce data; P(turn);
P(empties); P(fulls);
P(turn); result=buffer[start];
buffer[end] = data; start= (start + 1) % n;
end = (end + 1) % n; V(turn);
V(fulls); V(empties);
V(turn); use result;
} }
} }
- Mitä virheitä ratkaisussa on ja mitä toimintaongelmia nämä
virheet aiheuttavat? Anna yksi toimintaongelmaan johtava skenaario.
- Toimisiko ratkaisu, jos tuottajia ja kuluttajia olisi vain yksi (M=N=1)? Perustele.
- Onko mahdollista lisätä tuottajien
ja kuluttajien rinnakkaisuutta? Jos on, niin miten?
- Korjaa koodi
oikein toimivaksi tai kirjoita aivan oma ratkaisusi. Muista
liittää kommentteja omaan koodiisi, vaikka annetussa
koodissa ei niitä olekaan! Selitä, miten kohdan (a) virheet ja kohdan (c) suorituskykyä rajoittavat tekijät on huomioitu.