/ * 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 * /