Чтение онлайн

ЖАНРЫ

Параллельное и распределенное программирование на С++
Шрифт:

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

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

Issue 6

Функция pthread_create от м ечена как часть опции Threads.

В результате согласования со спецификацией Single UNIX Specification был добавлен обязательный код ошибки [EPERM].

С целью согласования со ста н дарто м IEEE Std 1003.1d-1999 для потока была добавлена се м антика тай м ера центрального

процессора.

Для согласования со стандарто м ISO/IEC 9899: 1999 в прототип функции pthread_create было добавлено ключевое слово restrict.

В раздел «Описание» внесено явное утверждение о то м, что среда обработки данных с плаваю щ ей точкой наслелуется от создаю щ его потока.

pthread_detach

Имя

pthread_detach — функция отсоединения потока.

Синопсис

THR

#include <pthread.h>

int pthread_detach (pthread_t thread);

Описание

Функция pthread_detach уведомляет реализацию о том, что область памяти для потока thread может быть восстановлена, когда он завершит выполнение. Если поток не завершается, функция pthread_detach не служит причиной для его завершения. Результат нескольких вызовов функции pthread_detach для одного и того же потока не определен.

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

При успешном завершении функция pthread_detach возвращает нулевое значение; в противном случае — код ошибки, обозначающий ее характер.

Ошибки

Функция pthread_detach завершится неудачно, если:

[EINVAL] реализация обнаружила, что значение, заданное параметром thread, не относится к присоединенному потоку;

[ESRCH] не был найден ни один поток, соответствующий заданному идентификационному номеру потока ID.

Эта функция не возвращает код ошибки [EINTR].

Примеры

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

Замечания по использованию

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

Логическое обоснование

Функции pthread_join или pthread_detach должны вызываться для каждого потока, который создается, чтобы можно было снова использовать область памяти, связанную с потоком.

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

1. В обработчике запроса на отмену для функции присоединения потока (pthread__join) важно иметь функцию pthread_detach, чтобы отсоединить поток. Без нее обработчик вынужден был бы выполнить еще раз функцию pthread_j oin , чтобы попытаться отсоединить поток, который не только задерживает процедуру отмены в течение неограниченного времени, но и вносит новый вызов функции pthread_join. В этом случае есть смысл говорить о динамическом отсоединении.

2. Чтобы отсоединить «исходный поток» (это может понадобиться в процессах, которые создают потоки сервера).

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

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

Смотри также

pthread_join , том Base Definitions стандарта IEEE Std 1003.1-2001, <pthread. h>.

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

Функция впервые реализована в выпуске Issue 5. Включена д

ля согласования с расширение м POSIX Threads Extension.

Issue 6

Функция pthread_detach отмечена как часть опции Threads.

pthread_exit

Имя

pthread_exit — функция завершения потока.

Синопсис

THR #include <pthread.h>

void pthread_exit (void *va2ue_ptr);

Описание

Функция pthread_exit завершает вызывающий поток и делает значение value _ptr доступны м для успешного присоединения к завершающе м у потоку Любые обработчики отмены, которые были помещены в стек, но еще не извлечены из него, будут извлечены в порядке, обратном тому, в котором они помещались туда, а затем выполнены. Если потоку принадлежат данные, то после выполнения всех обработчиков отмены булут вызваны соответствующие функции деструкторов (в неопределенном порядке). При завершении потока ресурсы процесса, включая мьютексы и дескрипторы файлов, не освобождаются, и не выполняются какие бы то ни было «восстановительные» действия уровня процесса, включал вызовы любых функций atexit, какие только могут существовать.

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

Поведение функции pthread_exit не определено, если она вызвана из обработчика запроса на отмену потока или функции деструктора, к которой было сделано обращение в результате явного или неявного вызова функции pthread_exit .

После завершения потока результат доступа к локальным переменным потока не определен. Таким образом, ссылки на локальные переменные существующего потока не следует использовать для функции pthread_exit в качестве значения параметра value_ptr.

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

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

Функция pthread_exit не возвращается к инициатору ее вызова.

Ошибки

Ошибки не определены.

Примеры

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

Замечания по использованию

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

Логическое обоснование

Нормальный механизм завершения потока состоит в возвращении из функции, которая была задана в вызове функции pthread_create . Функция pthread_exit обеспечивает возможность завершения потока без обязательного выхода из стартовой функции этого потока и, следовательно, служит аналогом функции exit .

Независимо от метода завершения потока любые обработчики отмены, которые были помещены в стек, но еще не извлечены из него, будут выполнены, а также вызваны деструкторы для любых существующих данных потока. Этот том стандарта IEEE Std 1003.1-2001 требует, чтобы обработчики отмены извлекались из стека и выполнялись по порядку. После выполнения всех обработчиков отмены для каждого элемента потоковых данных вызываются соответствующие функции деструкторов (в неопределенном порядке). Такая последовательность действий обязательна, поскольку обработчики отмены могут использовать данные потока.

Поделиться с друзьями: