pthread_cleanup_push()

Добавить на вершину стека вызовов обработчик прерывания потока

Прототип:

#include <pthread.h>
void pthread_cleanup_push( void (routine)( void* ),
void *arg );

Аргументы:

routine
Указатель на функцию, чей вызов необходимо добавить в стек.
arg
Аргумент функции routine.

Библиотека:

libc

Описание:

Макрос pthread_cleanup_push() добавляет на вершину стека вызов указанный в routine, который будет играть роль деструктора при операциях прерывания выполнения потока.

Указанный деструктор вызывается с аргументом arg в следующих случаях:


Note: Макрос pthread_cleanup_push() раскрывается препроцессором в виде нескольких строк кода с открывающей скобкой {, но без закрывающей }. Вы должны использовать его в паре с pthread_cleanup_pop(), который и включает закрывающую скобку.

Примеры:

Использование обработчика прерывания потока для освобождения ресурсов (например, мьютекса) при терминировании потока:

#include <pthread.h>
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void unlock( void *arg )
{
pthread_mutex_unlock( &lock );
}
void * function( void *arg )
{
while( 1 )
{
pthread_mutex_lock( &lock );
pthread_cleanup_push( &unlock, NULL );
/* Any of the possible cancellation points could go here. */
pthread_testcancel();
pthread_cleanup_pop( 1 );
}
}

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

POSIX 1003.1 THR

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

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

pthread_cleanup_pop(), pthread_cancel(), pthread_exit()




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