Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:laboratoare-2013:resurse:threaduri_extra [2017/04/10 17:21]
adrian.stanciu [Modificarea politicii de alocare a procesorului]
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 77: Line 77:
 ==== Modificarea atributului detașabil/​unificabil ==== ==== Modificarea atributului detașabil/​unificabil ====
  
-Pentru a seta/​verifica tipul unui fir de execuţie din punct de vedere detașabil/​unificabil se pot utiliza următoarele funcţii :+Pentru a seta/​verifica tipul unui fir de execuţie din punct de vedere detașabil/​unificabil se pot utiliza următoarele funcţii:
  
 <code c> <code c>
Line 86: Line 86:
 Primul parametru este un pointer la obiectul reprezentând atributele, iar al doilea parametru reprezintă starea dorită - unificabil/​detașabil. Deoarece implicit sunt create fire unificabile (valoarea ''​PTHREAD_CREATE_JOINABLE''​),​ această funcţie trebuie apelată doar dacă se creează fire detașabile și în acest caz al doilea parametru trebuie să aibă valoarea ''​PTHREAD_CREATE_DETACHED''​. Primul parametru este un pointer la obiectul reprezentând atributele, iar al doilea parametru reprezintă starea dorită - unificabil/​detașabil. Deoarece implicit sunt create fire unificabile (valoarea ''​PTHREAD_CREATE_JOINABLE''​),​ această funcţie trebuie apelată doar dacă se creează fire detașabile și în acest caz al doilea parametru trebuie să aibă valoarea ''​PTHREAD_CREATE_DETACHED''​.
  
-Chiar dacă un fir de execuţie este creat unificabil, el poate fi transformat ulterior într-un fir detașabil apelând funcţia ''​pthread_detach''​. Însă ​o data detașat, nu mai poate fi făcut unificabil ​la loc.+Chiar dacă un fir de execuţie este creat unificabil, el poate fi transformat ulterior într-un fir detașabil apelând funcţia ''​pthread_detach''​. Însă detașat, nu mai poate fi refăcut unificabil.
  
 ==== Modificarea politicii de alocare a procesorului ==== ==== Modificarea politicii de alocare a procesorului ====
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.
so/laboratoare-2013/resurse/threaduri_extra.1491834061.txt.gz · Last modified: 2017/04/10 17:21 by adrian.stanciu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0