Rozwiązanie problemu śpiącego Golibrody

0

Czy ktoś może mi pomóc w rozwiązaniu problemu śpiącego Golibrody?
Chodzi o to, żeby zaimplementować go w C, z użyciem wątków i elementów służących do synchronizacji wątków (np. semafor, muteks).

Problem śpiącego golibrody (ang. The Sleeping-Barber Problem).
W zakladzie fryzjerskim jest poczekalnia z N krzeslami i salon z jednym tylko fotelem.
Jesli brakuje klientów, to fryzjer po prostu zasypia.
Jeźeli w poczekalni nie ma wolnych miesc, to nowy klient opuszcza zakład.
Gdy fryzjer jest zajęty, ale są wolne miejsca, wówczas klient siada na jednym z nich.
Jesli fryzjer śpi, to klient go budzi.

0

Jeden wątek dla klientów co przychodzą, drugi dla fryzjera. I teraz klient przychodzi, i sprawdzamy czy flaga u fryzjera wskazuje czy śpi, czy pracuje. Fryzjer goli kogoś, a w tym samym momecie klieńci przychodzą, siadają, odchodzą.

Wg mnie to bardziej na C++.

0

Po co sprawdzać flage u fryzjera czy spi czy pracuje ? Robisz dwa watki jeden dla przyjscia klientow, drugi dla fryzjera i komunikacje miedzy nimi za pomoca kolejki komunikatow.
Fryzjer sprawdza czy kolejka komunikatow jest pusta. Jesli tak to czeka na sygnal aby moc odczytac z kolejki komunikatow nastepny komunikat(klienta).Strzyrze go i wraca z powrotem do kolejki komunikatow(krzesel) aby sprawdzic czy ktos jeszcze zostal.
Klienci przychodza do fryzjera (sa umieszczani w kolejce komunikatow) jesli ow kolejka jest pelna po prostu klient nie zostanie umieszczony w kolejce. Polecam ksiazke Programowanie w systemie UNIX. Jest tam opisana kolejka komunikatow oraz przyklady jej implementacji.

P.W. A czemu nie mozna tego w C napisac ? Bez roznicy C czy C++ taka prawda :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1