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