Параллельное и распределенное программирование на С++ (Хьюз, Хьюз) - страница 402

К достоинству варианта создания специальной функции можно отнести осознание того, что уведомление об отмене потока было бы в этом случае четко определенным. Кроме того, механизм выдачи уведомления об отмене не требует реализации в виде сигнала. Ведь если такой механизм заметно ближе к сигналам, то ему свойственны аналогии с языковым механизмом исключительных ситуаций, которые потенциально не видны.

В конечном счете, поскольку необходимость обеспечивать обработку большого числа исключительных ситуаций при использовании нового сигнала с существующими сигнальными функциями может неоправданно усложнить (даже запутать) процесс отмены потока, было решено сделать выбор в пользу специальной функции, которая устраняет эту проблему. Такая функция была тщательно разработана, причем так, что любая реализация могла бы обеспечить «безоговорочное» выполнение процедуры отмены «поверх» каких бы то ни было сигналов. Наличие специальной функции отмены потока также означает, что реализации не обязаны обеспечивать процедуру отмены с помощью сигналов.

Будущие направления

Отсутствуют.

Смотри также

pthread_exit (), pthread_cond_timedwait (), pthread_join (), pthread_setcancelstate (), то м Base D e finitions стандарта IEEE Std 1003.1-2001, .

Последовательность внесения изменений

Функция впервые реализована в выпуске Issue 5. Включена для согласования с расширение м POSIX Threads Ext e nsion.

Issue 6

Функция pthread_cancel () от м ечена как часть опции Thr e ads.

pthread_cleanup_pop, pthread_cleanup_push

Имя

pthread_cleanup_pop, pthread_cleanup_push— функции создания обработчиков запроса об от м ене потоков.

Синопсис

THR

#include

void pthread_cleanup_pop (int execute);

void pthread_cleanup_push (void (* routine) (void*),void *arg);

Описание

Функция pthread_cleanup_pop () используется для извлечения функции, расположенной в вершине стека вызываю щ его потока, предназначенного дл я выполнения подготовительных действий по аннулированию потока, и ее вызова (если пара м етр execute не равен нулю).

Функция pthread_cleanup_push() позволяет поместить в стек вызывающего потока заданную функцию обработчика routine, предназначенного для выполнения подготовительных действий по аннулированию потока. Этот обработчик будет извлечен из соответствующего стека и вызван с аргументом arg при наличии следующих условий:

• поток существует (т.е. он вызывает функцию pthread_exit ());

• поток действует в соответствии с запросом отмены;

• поток вызывает функцию pthread_cleanup_pop() с ненулевым значением аргумента execute.