Очікування завершення потоку

/ * Очікування завершення потоку "tid" зі статусом status * /

ret = pthread_join (tid, status);

/ * Очікування завершення потоку "tid" без статусу * /

ret = pthread_join (tid, NULL);

Мал. 25. Завершення потоку.

Функція pthread_join () блокує викликає потік, поки вказаний потік не завершиться. Зазначений потік повинен належати поточному процесу і не повинен бути відділений. Якщо status НЕ дорівнює NULL. він вказує на змінну, яка приймає значення статусу виходу завершеного потоку при успішному завершенні pthread_join (). Кілька потоків не можуть чекати завершення одного і того ж потоку. Якщо вони намагаються виконати це, один потік завершується успішно, а всі інші - з помилкою ESRCH. Після завершення pthread_join (), будь-який простір стека, пов'язане з потоком, може бути використано додатком.

У наступному прикладі (рис. 26) один потік верхнього рівня викликає процедуру, яка створює новий допоміжний потік, що виконує складний пошук в базі даних, що вимагає певних витрат часу. Головний потік чекає результатів пошуку, і в той же час може виконувати іншу роботу. Він чекає свого помічника за допомогою функції pthread_join (). Аргумент pbe є параметром стека для нового потоку.

Вихідний код для thread.c.

struct phonebookentry * pbe;

pthread_create (helper, NULL, fetch, pbe);

/ * Виконує власне завдання * /

/ * Тепер можна використовувати результат * /

Схожі статті