[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