Vícevláknová aplikace – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vícevláknová aplikace – Java – Fórum – Programujte.comVícevláknová aplikace – Java – Fórum – Programujte.com

 

peace360
Duch
15. 5. 2010   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 81.90.251.–
liborb
~ Redaktor
+18
Guru
15. 5. 2010   #2
-
0
-

Potřebuješ synchronizaci mezi vlákny. Těch je víc. Zámky, semafory, mutexy ... Na tvůj problém se nejvíc hodí semafor.

Nahlásit jako SPAM
IP: 195.189.143.–
peace360
Duch
15. 5. 2010   #3
-
0
-

Dobrý večer, děkuji za vaši odpověď, pokusím se toto téma nastudovat. Bohužel je to ale poprvé co dělám s vlákny, myslíte, že byste mi mohl naznačit řešení mého problému? Můj projekt přikládám k příspěvku. Byl bych Vám velice vděčný.

Nahlásit jako SPAM
IP: 81.90.251.–
liborb
~ Redaktor
+18
Guru
17. 5. 2010   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 85.207.166.–
peace360
Duch
17. 5. 2010   #5
-
0
-

Dobrý den, tak se mi to povedlo! Moc Vám děkuji za odpovědi a za ochotu.

Nahlásit jako SPAM
IP: 81.90.251.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Podobná vlákna

Aplikace z c++ — založil ovens

Aplikace ve VS — založil kuba

Aplikace — založil hanis

Aplikace — založil ETNyx

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý