Portál AbcLinuxu, 10. května 2025 02:17

Dotaz: Synchronizace vláken

Jardík avatar 7.3.2010 21:35 Jardík | skóre: 40 | blog: jarda_bloguje
Synchronizace vláken
Přečteno: 567×
Odpovědět | Admin
Zdravím, měl bych dotaz ohledně následující situace.

Mám 2 vlákna. Jedno je hlavní vlákno aplikace (nazvěme ho main) a 2. vlákno má provést akci (nazývejme ho vlakno), když ho o to první vlákno požádá a pak buď čekat na požádání o další akci, nebo se ukončit (v závislosti na typu akce).

Zatím jsem to nějak neprogramoval, protože mi moc nejde do hlavy, jak to udělám. Co když budu signálovat vlakno, aby něco udělalo a ono zrovna nebude čekat na signalizaci, protože něco již dělá?
Věřím v jednoho Boha.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.3.2010 21:50 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Synchronizace vláken
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bez informace, jak tu synchronizaci chcete realizovat, těžko spekulovat.
7.3.2010 22:49 podlesh | skóre: 38 | Freiburg im Breisgau
Rozbalit Rozbalit vše Re: Synchronizace vláken
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předpokládám že ta "signalizace" a "požádání o akci" znamená předání nějakých dat mezi vlákny (a tedy nestačí jen semafor).

Jedna možnost: signalizující vlákno 1 musí samozřejmě počkat, až se vlákno 2 dostane do bodu kdy na signalizaci čeká. Pak si předají informace a pokračují dál svou cestou. Říká se tomu randesvous :-)

Další možnost: FIFO fronta zpráv, kde bude vlákno 1 zprávy ukládat a vlákno 2 je bude vybírat. V tomto případě nebude vlákno 1 nikdy čekat.

Co je vhodnější závisí na situaci. A samozřejmě pokud je situace specifičtější, tak mohou být specifičtější i řešení.
Jardík avatar 8.3.2010 00:58 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Synchronizace vláken
Super, dík za tip s FIFO :-) To se hodí.
Věřím v jednoho Boha.
8.3.2010 20:09 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Synchronizace vláken
randesvous
rendezvous
FIFO...nebude vlákno 1 nikdy čekat
Bude, pokud se fifo naplní.
In Ada the typical infinite loop would normally be terminated by detonation.
8.3.2010 13:39 dark
Rozbalit Rozbalit vše Re: Synchronizace vláken
Odpovědět | | Sbalit | Link | Blokovat | Admin
Udělat si event loop a posílat zprávy. Pokud vlákno zrovna něco dělá, zpráva se zpracuje později. Toto se dá zkombinovat i s UI toolkitem.
8.3.2010 14:23 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Synchronizace vláken
Což je v podstatě totéž jako už zmíněná fronta.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.