Tak to jest zmodyfikowany problem czytelników i pisarzy. Tyle że czytelnikami są orangutany przemieszczające się z punktu A do B a pisarze to orangutany przemieszczające się punktu B do A. Jeszcze jedna różnica jest taka, że pisarzy przebywających w czytelni może być wiele. Tak więc kilka małych modyfikacji do programu z http://putwiki.informatyka.org/wiki/Problem_czytelnik%C3%B3w_i_pisarzy
[code]
Semaphore mutexAB = 1;
Semaphore mutexBA = 1;
Semaphore site = 1;
Semaphore lineCapacity = N;
unsigned int countOrangutanAB = 0;
unsigned int countOrangutanBA = 0;
void OrangutanBA() {
while (true) {
OtherComputing();
P(lineCapacity);
P(mutexBA);
countOrangutanBA = countOrangutanBA +1;
if (countOrangutanBA == 1)
P(site);
V(mutexBA);
/* sekcja krytyczna /
access(resource);
/ koniec sekcji krytycznej */
P(mutexBA);
countOrangutanBA = countOrangutanBA -1;
if (countOrangutanBA == 0)
V(site);
V(mutexBA);
V(lineCapacity);
}
}
void OrangutanAB() {
while (true) {
OtherComputing();
P(lineCapacity);
P(mutexAB);
countOrangutanAB = countOrangutanAB +1;
if (countOrangutanAB == 1)
P(site);
V(mutexAB);
/* sekcja krytyczna /
access(resource);
/ koniec sekcji krytycznej */
P(mutexAB);
countOrangutanAB = countOrangutanAB -1;
if (countOrangutanAB == 0)
V(site);
V(mutexAB);
V(lineCapacity);
}
}
}
[/code]
Jeszcze trzeba zrobić tak aby orangutan AB po przejściu zmieniał się w orangutana BA i odwrotnie i pomyśleć czy taki kod może doporowadzić do zagłodzenia którejś ze stron :]