[OSy] Potiz s testy prvniho zakladniho zadani
Martin Decky
decky at d3s.mff.cuni.cz
Tue Nov 26 19:47:42 CET 2013
Hezky den,
testy skutecne predpokladaji, ze datovy typ thread_t je ve skutecnosti
ukazatel na strukturu (ovsem to, ze jde o ukazatel, je v API skryto).
Funkce thread_create() strukturu vlakna take dynamicky alokuje.
Standardni implementace teto abstrakce tedy vypada nasledovne:
struct thread {
/* ... */
};
typedef struct thread * thread_t;
Vase reseni, kdy struktura vlakna obsahuje pouze handle pro identifikaci
jine struktury fyzicky popisujici vlakno, znamena jednu uroven abstrakce
navic a s tim testy zkratka nepocitaji. Tento datovy typ by se dle meho
nazoru nemel jmenovat thread_t, ale treba thread_id_t, a API funkce pro
fyzickou praci s vlakny by nadale mely pouzivat fyzickou strukturu
vlakna thread_t. Typ thread_id_t se naopak vyborne hodi pro rozhrani
systemovych volani.
Pokud skutecne trvate na tom, aby struktura thread_t obsahovala pouze
handle, muzete stale pouzit typedef jako je uveden vyse, i kdyz to
rozhodne neni elegantni reseni. Dalsi moznost je rezignovat na striktni
typovou kontrolu a typ thread_t deklarovat jako void *, ktery vsak
nebude interpretovan jako ukazatel, ale jako handle.
Rozhodne se take nebranime tomu, abyste si testy upravili a tam, kde se
nyni pouziva vypis thread_t pomoci %p, byl vypis thread_t.id pomoci %u.
Smysl testu to samozrejme neovlivni. Prosim, nezapomente takovou zmenu
testu zdokumentovat.
Stale si myslim, ze neni duvod, aby si kernelove funkce vzajemne
predavaly jen handle vlakna a ne vlakno samotne. Nicmene pokud Vase
implementace s jednou abstrakci navic ma nejake vyhody, ktere ted
nevidim, prizpusobte tomu zbytek infrastruktury podle sveho nejlepsiho
uvazeni.
M.D.
More information about the NSWI004
mailing list