Așteptând ca firul să se termine

/ * așteaptă ca firul să se termine "tid" cu status status * /

ret = pthread_join (tid, statut);

/ * așteptând ca firul să se termine "tid" fără starea * /

ret = pthread_join (tid, NULL);







Fig. 25. Finalizarea fluxului.

Funcția pthread_join () blochează firul de apel până când firul specificat se termină. Fluxul specificat trebuie să aparțină procesului actual și nu trebuie separat. Dacă statutul nu este NULL. el indică o variabilă care ia valoarea stadiului de ieșire a firului completat la finalizarea cu succes a pthread_join (). Firele multiple nu pot aștepta ca același fir să se termine. Dacă încearcă să facă acest lucru, un fir reușește și toate celelalte nu reușesc cu o eroare ESRCH. După terminarea pthread_join (), orice spațiu de stivă asociat cu firul poate fi utilizat de aplicație.







În următorul exemplu (Figura 26), un fir de nivel superior invocă o procedură care creează un fir auxiliar nou care efectuează o căutare complexă în baza de date care necesită o anumită perioadă de timp. Firul principal așteaptă rezultatele căutării și, în același timp, poate efectua alte activități. El așteaptă ajutorul său folosind funcția pthread_join (). Argumentul pbe este parametrul stivei pentru noul fir.

Cod sursă pentru thread.c.

structură telefonică * pbe;

pthread_create (ajutor, NULL, preluare, PBE);

/ * își desfășoară propria sarcină * /

/ * acum puteți utiliza rezultatul * /







Articole similare

Trimiteți-le prietenilor: