[OSy] thread_create && robust_thread_create
tom.bartonek at volny.cz
tom.bartonek at volny.cz
Sun Nov 2 22:19:43 CET 2014
Dobrý večer,
položím prvních několik z mnoha dotazů, které nepochybně budu klást, pokud mi někdo pomůže, budu rád.
1)
technický dotaz - v testech se některé funkce vyskytují ve variantě robust, není mi příliš jasné, co se od této varianty očekává, všiml jsem si hlavně, že mají trochu jiné parametry než ty "klasické" varianty
čím se mají tyto robust funkce lišit od původních? Respektive k čemu slouží?
2)
dost mě matou parametry funkce thread_create:
thread_t * thread_ptr - předpokládám, že se jedná o lokaci nového vlákna, takže malloc musím volat ještě před voláním thread_create? tak nějak mi přišlo logičtější si alokovat paměť pro vlákno, až ve funkci, kterou jej chci vytvořit - což mám pocit, že v tomto případě nejde, protože abych mohl tenhle pointer předat navenek, musel bych v parametrech dostat ne pointer na vlákno, ale pointer na pointer na vlákno
Takže při tvoření vlákna první malloc(sizeof(thread_to_be_created)) a potom thread_create?
void *(*thread_start)(void *) - ukazatel na zacatek funkce, kterou mám z vlákna zavolat - takže poté, co vlákno stvořím, mám nějak zavolat tuhle funkci? Jak velkou část tohoto pokrývá fce thread_init?
void * data - kde má fce v paměti uložená data, nějak nakrmit do fce thread_start - rád nakrmím, pokud se mi podaří zjistit, jak...
flagy zatim mozno ignorovat, takze proxy struct, aby compiler neřval.
3)
jaký je důvod, že na vlákno může čekat jenom jedno jiné vlákno?(viz požadavky v testech - EINVAL pokud už na vlákno někdo čeká) - respektive čekal bych frontu, která bude probuzena po skončení vlákna na které čekají, první z fronty, který se dostane k lizu bude ok a zbylí buď taky a nebo se přeřadí a budou čekat na toho, který měl štěstí...
4)
co se vláken týče, používá se nějaká tabulka pro všechny vlákna? - ta naplánovaná jsou v listu scheduleru, ale kde jsou ty zbylá? některá si občas někdo pamatuje, ale co třeba s takovým vláknem, které si zavolá suspend a nikdo ho nebudí - bude čekat do skonání světa?
a kdy uvolnit samotnou strukturu vlákna(dejme tomu že při kill detached vlákna je to ok, ale co s vláknem, které jenom zabiju - kdy se ho zbavit? (protože když se někdo snaží o join na killed vlákno, mám vyhodit EKILLED)...
To je prozatím snad vše, ale ono mě zase určitě něco napadne.
děkuji
Tomáš Bartoněk
More information about the NSWI004
mailing list