This shows you the differences between two versions of the page.
so:laboratoare-2013:resurse:threaduri_extra [2017/04/10 17:22] adrian.stanciu [Modificarea atributului detașabil/unificabil] |
so:laboratoare-2013:resurse:threaduri_extra [2017/04/11 10:48] (current) adrian.stanciu [Modificarea dimensiunii și adresei de start a stivei] |
||
---|---|---|---|
Line 56: | Line 56: | ||
Atributele unui fir de execuţie (cu o excepţie) sunt specificate la crearea firului de execuţie și __nu pot fi schimbate__ pe perioada în care firul de execuţie este folosit. | Atributele unui fir de execuţie (cu o excepţie) sunt specificate la crearea firului de execuţie și __nu pot fi schimbate__ pe perioada în care firul de execuţie este folosit. | ||
- | Pentru __iniţializarea__ și respectiv __distrugerea__ unui obiect ce reprezintă atributele unui fir de execuţie avem la dispoziţie funcţiile : | + | Pentru __iniţializarea__ și respectiv __distrugerea__ unui obiect ce reprezintă atributele unui fir de execuţie avem la dispoziţie funcţiile: |
<code c> | <code c> | ||
Line 63: | Line 63: | ||
</code> | </code> | ||
- | Pentru a stabili anumite atribute specifice ale unui fir, trebuie urmaţi câţiva pași : | + | Pentru a stabili anumite atribute specifice ale unui fir, trebuie urmaţi câţiva pași: |
- | # se creează un obiect de tipul ''pthread_attr_t'', de exemplu declarând o variabilă de acest tip. | + | * se creează un obiect de tipul ''pthread_attr_t'', de exemplu declarând o variabilă de acest tip. |
- | # se apelează funcţia ''pthread_attr_init'' căreia i se dă ca parametru un pointer la acest obiect. Această funcţie iniţializează atributele cu valorile lor implicite. | + | * se apelează funcţia ''pthread_attr_init'' căreia i se dă ca parametru un pointer la acest obiect. Această funcţie iniţializează atributele cu valorile lor implicite. |
- | # se modifică obiectul ce contine atributele folosind una din funcţiile prezentate mai jos, pentru ca să se obţină atributele dorite. | + | * se modifică obiectul ce contine atributele folosind una din funcţiile prezentate mai jos, pentru ca să se obţină atributele dorite. |
- | # se transmite un pointer la aceste atribute funcţiei ''pthread_create''. | + | * se transmite un pointer la aceste atribute funcţiei ''pthread_create''. |
- | # se apelează funcţia ''pthread_attr_destroy'' pentru a elibera obiectul ce reprezintă atributele (variabila de tip ''pthread_attr_t'' nu este însă dezalocată, ea poate fi refolosită utilizând ''pthread_attr_init''). | + | * se apelează funcţia ''pthread_attr_destroy'' pentru a elibera obiectul ce reprezintă atributele (variabila de tip ''pthread_attr_t'' nu este însă dezalocată, ea poate fi refolosită utilizând ''pthread_attr_init''). |
Un același obiect de tip ''pthread_attr_t'' poate fi folosit pentru crearea mai multor fire de execuţie distincte și nu este necesar să fie păstrat după crearea acestora. | Un același obiect de tip ''pthread_attr_t'' poate fi folosit pentru crearea mai multor fire de execuţie distincte și nu este necesar să fie păstrat după crearea acestora. | ||
Line 127: | Line 127: | ||
Dacă firul a fost creat unificabil stiva nu poate fi eliberată până nu se va termina un apel ''pthread_join'' pentru respectivul fir. | Dacă firul a fost creat unificabil stiva nu poate fi eliberată până nu se va termina un apel ''pthread_join'' pentru respectivul fir. | ||
- | De obicei biblioteca de fire de execuţie alocă 1M de memorie virtuală pentru fiecare stivă de fir de execuţie. | + | De obicei biblioteca de fire de execuţie alocă 2M de memorie virtuală pentru fiecare stivă de fir de execuţie. |
Limita minimă pentru dimensiunea unei stive a unui fir de execuţie este PTHREAD_STACK_MIN. | Limita minimă pentru dimensiunea unei stive a unui fir de execuţie este PTHREAD_STACK_MIN. |