pthread_exit -
завершает
работу
вызвавшей
нити
POSIX threads library (
libpthread,
-lpthread)
#include <pthread.h>
[[noreturn]] void pthread_exit(void *retval);
Функция
pthread_exit()
завершает
работу
вызвавшей
нити и
возвращает
значение
через
retval,
доступное
(если к нити
можно
присоединиться)
другой
нити в том
же
процессе,
вызвавшей
pthread_join(3).
Если есть
какие-либо
невызванные
очищающие
обработчики,
установленные
pthread_cleanup_push(3), то они
выполняются
(в обратном
регистрации
порядке).
Если у нити
есть
какие-либо
свои
данные, то
после
выполнения
очищающих
обработчиков
вызываются
соответствующие
функции
удаления, в
неопределённом
порядке.
Когда нить
завершает
выполнение
связанные
с
процессом
ресурсы
(например,
мьютексы,
условные
переменные,
семафоры и
файловые
дескрипторы)
не
освобождаются
и функции,
зарегистрированные
через
atexit(3), не
вызываются.
После
завершения
последней
нити
процесса,
процесс
завершает
работу как
при вызове
exit(3) с
нулевых
кодом
выхода; то
есть
ресурсы
процесса
освобождаются
и
вызываются
функции,
зарезервированные
с помощью
atexit(3).
Данная
функция не
возвращает
выполнение
вызвавшему.
Данная
функция
всегда
завершается
успешно.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
pthread_exit() |
Безвредность
в нитях |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Выполнение
возврата
из
начальной
функции
любой не
главной
нити
приводит к
неявному
вызову
pthread_exit(),
возвращаемое
значение
которой
является
кодом
выхода
нити.
Чтобы
продолжить
выполнение
других
нитей,
главная
нить
должна
завершаться
вызовом
pthread_exit(), а не
exit(3).
Значение,
на которое
указывает
retval, не
должно
располагаться
в стеки
вызывающей
нити, так
как
содержимое
этого
стека не
определено
после
завершения
работы
нити.
В
настоящее
время в
реализуемой
ядром
логики
есть
ограничения
для
остановленных
групп
нитей с
помощью
wait(2)
с мёртвым
лидером
группы
нитей. Из-за
этого
могут
возникнуть
такие
проблемы
как
заблокированный
терминал,
если
сигнал
останова
посылается
фоновому
процессу, у
которого
лидер
группы
нитей уже
вызвал
pthread_exit().
pthread_create(3),
pthread_join(3),
pthreads(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexey, Azamat Hackimov <
[email protected]>, kogamatranslator49
<
[email protected]>, Kogan, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]