Linux repositories inspector

pthread_cleanup_push_defer_np(3) - Russkiy

Linux
2017-09-15
Aliases: pthread_cleanup_pop_restore_np(3), pthread_cleanup_pop_restore_np(3), pthread_cleanup_pop_restore_np(3), pthread_cleanup_pop_restore_np(3), pthread_cleanup_pop_restore_np(3), pthread_cleanup_pop_restore_np(3)

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

ИМЯ

pthread_cleanup_push_defer_np, pthread_cleanup_pop_restore_np - добавляет и удаляет очищающие обработчики отмены нити при сохранении типа отмены

ОБЗОР

#include <pthread.h>

void pthread_cleanup_push_defer_np(void (*routine)(void *), void *arg); void pthread_cleanup_pop_restore_np(int execute);
Компилируется и компонуется вместе с -pthread.
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
pthread_cleanup_push_defer_np(), pthread_cleanup_pop_defer_np():
_GNU_SOURCE

ОПИСАНИЕ

Эти функции работают также как pthread_cleanup_push(3) и pthread_cleanup_pop(3), за исключением различий, описанных в данной справочной странице.
Подобно pthread_cleanup_push(3), pthread_cleanup_push_defer_np() добавляет routine в стек нити к очищающим обработчикам отмены. Кроме этого, она также сохраняет текущий тип отмены нити, и изменяет тип отмены на «отложенный» (смотрите pthread_setcanceltype(3)); это гарантирует, что очистка при отмене произойдёт даже, если тип отмены нити перед вызовом был «асинхронный».
Подобно pthread_cleanup_pop(3), pthread_cleanup_pop_restore_np() удаляет самый верхний очищающий обработчик из стека нити очищающих обработчиков отмены. Кроме этого, она восстанавливает тип отмены нити в значение на момент, когда была вызвана pthread_cleanup_push_defer_np().
Вызывающий должен гарантировать, что вызовы этих функций будут попарными внутри одной функции, и на одном лексическом уровне вложенности. Остальные ограничения описаны в pthread_cleanup_push(3).
Последовательность вызовов:
pthread_cleanup_push_defer_np(routine, arg); pthread_cleanup_pop_restore_np(execute);
эквивалентна (но короче и эффективнее):
int oldtype;
pthread_cleanup_push(routine, arg); pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype); ... pthread_setcanceltype(oldtype, NULL); pthread_cleanup_pop(execute);

СООТВЕТСТВИЕ СТАНДАРТАМ

Данные функции являются не стандартизированными расширениями GNU, о чём свидетельствует наличие суффикса «_np» (nonportable).
⇧ Top