[OSy] Zivot vlaken
Petr Tuma
petr.tuma at dsrg.mff.cuni.cz
Sun Oct 26 07:22:49 CET 2008
Dobry den,
> Atached vlakno (na ktere se ovsem nikdo nejoinul):
> a) Kdy a kym se ma uvolnit pamet (a jeho ID zneplatnit) po dobehnuti?
> b) Kdy a kym se ma uvolnit pamet (a jeho ID zneplatnit) po killnuti?
>
> Detached vlakno:
> a) Kdy a kym se ma uvolnit pamet (a jeho ID zneplatnit) po dobehnuti?
> b) Kdy a kym se ma uvolnit pamet (a jeho ID zneplatnit) po killnuti?
Obvykla interpretace techto volani je:
- Pokud vlakno normalne dobehne (napriklad se vrati ze sve
thread_start funkce) a bylo attached, je neci povinnosti zavolat na nej
join, jinak zustava v pameti "vecne" (nezavolat join se tak svym
zpusobem povazuje za chybu uzivatele, ktera se da v realnem systemu
nejak rozumne kompenzovat - napriklad vsechna vlakna pochopitelne zmizi,
kdyz skonci jejich proces - a pokud je mezi procesy vztah parent-child,
pak child bude uvolnen pokud skonci parent).
- Pokud vlakno dobehne a bylo detached, vse s nim spojene se uvolnuje
ihned (vetsinou je to zarizene tak, ze po navratu z funkce thread_start
ziska rizeni zase system, ktery po takovem vlakne "uklidi").
- U killnuti je spravne chovani trosku vetsi otazka, protoze neni k
dispozici tolik praktickych prikladu chovani (nasilne zabiti vlakna neni
tak casto implementovano, protoze muze vest k problemum). Nastesti v
tomto pripade mate primo v zadani napsano, ze funkce join vraci EKILLED,
pokud bylo vlakno predtim zruseno volanim kill, coz naznacuje, ze se
nejaka informace o vlakne (minimalne jak skoncilo) musi pamatovat. Tedy
bych predpokladal, ze na vlakno, ktere bylo zabito volanim kill, se
pohlizi stejne jako na vlakno, ktere samo skoncilo.
Mozna jeste jeden detail. V zadani se rika, ze pokud neni ani zadanim,
ani testy definovano presne chovani, muzete si sve "rozumne" chovani
dodefinovat. Myslim, ze prave v pripade kill byste mohli nejakou takovou
vec podniknout.
Petr Tuma
More information about the NSWI004
mailing list