pthread_timedjoin(), pthread_timedjoin_monotonic()

Ожидание завершения потока с ограничением по времени

Прототип:

#include <pthread.h>
int pthread_timedjoin( pthread_t thread,
void **value_ptr,
const struct timespec *abstime );
int pthread_timedjoin_monotonic( pthread_t thread,
void **value_ptr,
const struct timespec *abstime );

Аргументы:

thread
Целевой поток, чьего терминирования требуется дождаться.
value_ptr
NULL или указатель на переменную, где функция может хранить значение, которое возвращает pthread_exit().
abstime
Указатель на структуру struct timespec, определяющую максимальное время ожидания завершения.

Библиотека:

libc

Описание:

Функции pthread_timedjoin() и pthread_timedjoin_monotonic() аналогичны pthread_join() за тем исключением, что возвращают статус ETIMEDOUT, если превышено максимальное время ожидания abstime (например, если системное время равно или больше величины abstime):

Функция pthread_timedjoin_monotonic() использует CLOCK_MONOTONIC и ее таймаут не зависит от изменений системного времени.

Обе функции блокируют вызывающий поток в ожидании терминирования потока thread до тех пор, пока последний не терминируется. Если указатель value_ptr не равен NULL и pthread_join() завершается успешно, то по этому адресу записывается аргумент функции pthread_exit(). Если целевой поток прерывается, а не завершается, value_ptr устанавливается в значение PTHREAD_CANCELED.

Целевой поток должен иметь статус joinable. Множественный вызов pthread_join(), pthread_timedjoin(), ThreadJoin() и ThreadJoin_r() на один и тот же поток не допускается. Если pthread_timedjoin() или pthread_timedjoin_monotonic() завершается успешно – это означает, что поток завершился успешно.

Возвращаемое значение:

EOK
Успешное завершение.
EBUSY
Поток thread уже имеет ожидающую блокировку.
EDEADLK
Поток thread соответствует вызывающему.
EFAULT
При доступе к предоставленным буферам произошла ошибка.
EINVAL
Поток thread не имеет статуса joinable.
ESRCH
Поток thread не существует.
ETIMEDOUT
Абсолютное время, указанное в abstime, истекло до завершения целевого потока.

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

pthread_create(), pthread_detach(), pthread_exit(), pthread_join(), ThreadJoin(), ThreadJoin_r(), struct timespec




Предыдущий раздел: Описание API системной библиотеки