mezi zidli a klavesnici

Ales Prochaska prochaska na alsoft.cz
Úterý Únor 28 10:21:31 CET 2012


> Tak o tomto velice pochybuji.

Znám minimálně jeden, který to umí.

>   Pokud by to nějaký překladač skutečně udělal (o čemž pochybuji primárně),
> musel by zajistit vzájemnou synchronizaci a blokování těch tasků
> (prostřednictvím spinlocku, mutexu, semaforu či podobného mechanismu)
> tak, aby se nepokoušely pracovat současně, což by samozřejmě vedlo k
> výrazné nestabilitě výsledku :-). A díky tomu by to bylo nesrovnatelně
> větší a hlavně i pomalejší než jednoduché single-threaded řešení.

V tomto případě semaforu. Je to větší, ale když je potřeba dělat
nějaké složitější výpočty nad nějakým větším polem tak už se to
vyplatí. Samozřejmě, že u polí o pár tisících složkách je to k ničemu.


>   Minimálně v *IXovém světě, pokud chcete, aby běželo něco multithreadově
> nebo dokonce multiprocesně, musíte si to zajistit sám (clone(), fork()),
> žádný kompilátor si toto nedovolí udělat o své vlastní vůli. Programování
> v jiných OSech neznám, ale divil bych se, kdyby to tam bylo výrazně
> odlišné.

Ne o své vlastní vůli, o vůli programátora, #pragma optimize(...)

Jinak u jazyků, které používají task jako úroveň abstrakce (Ada) se
fork nedělá (samozřejmě, kdesi v hluboko systémové knihovně ano),
například u Ady se task spouští vstupem do jeho oblasti platnosti
(zpravidla přes new).


>   Zdraví Pavel

Aleš Procháska





Další informace o konferenci Hw-list