Dobrý den, potřeboval bych poradit s úkolem. Mám naprogramovat aplikaci na simulaci hospody s využitím vláken. Vlákna reprezentují hosty a číšníky. Na začátku se nastavuje počet hostů a číšníků. Hosti si objednávají a číšnici postupně přinášejí. Potřeboval bych pomoci se spoluprácí vláken. Nevím jak udělat, aby číšník mohl vždy obsluhovat pouze jednoho hosta, ostatní musí čekat. Zatím mám pouze udělané, že číšníci obsluhují, ale všechny naráz. Vlákna se přepínají pomocí metody yield.
Byl bych rád za každou radu. V případě potřeby bych poskytnul dosavadní kód.
Fórum › Java
Vícevláknová aplikace
V podstatě je to klasický případ producent - konzument. Konzument může zpracovávat až ve chvíli, kdy producent řekne: hotovo. To se řeší tak, že se udělá semafor (0/1). Může mít i víc hodnot, ale to nebude tento případ (leda by mohl číšník přinést jídlo více hostům najednou nebo nějaká taková situace). Když si host objedná, tak vezme číšníkovi z jeho semaforu "bod" (wait), tím ho shodí do 0 a při dalším pokusu o přístup na číšníka :smile1: se další host zadrhne (čeká, proto wait). Číšník maká ... a když dodělá, co bylo požadováno, tj. obslouží hosta, tak host může vrátit "bod" číšníkovi (release). Ten se stává volným a může obsloužit dalšího (který už čeká). A podobné je to i hosta, když jí, tak nemůže být obsluhován. Nebo-li si musíš dávat pozor na deadlock, aby host nečekal na číšníka a ten čísník zase na toho hosta.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Dotazování na stav aplikace, řízení stavu aplikace — založil hlucheucho
Aplikace z c++ — založil ovens
Aplikace ve VS — založil kuba
Aplikace — založil ETNyx
Moderátoři diskuze