Параллельное и распределенное программирование на С++
Шрифт:
1. В обработчике запроса на отмену для функции присоединения потока (pthread__join) важно иметь функцию pthread_detach, чтобы отсоединить поток. Без нее обработчик вынужден был бы выполнить еще раз функцию pthread_j oin , чтобы попытаться отсоединить поток, который не только задерживает процедуру отмены в течение неограниченного времени, но и вносит новый вызов функции pthread_join. В этом случае есть смысл говорить о динамическом отсоединении.
2. Чтобы отсоединить «исходный поток» (это может понадобиться в процессах, которые создают потоки сервера).
Будущие направления
Отсутствуют.
Смотри также
pthread_join ,
Последовательность внесения изменений
Функция впервые реализована в выпуске 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 не возвращается к инициатору ее вызова.
Ошибки
Ошибки не определены.
Примеры
Отсутствуют.
Замечания по использованию
Отсутствуют.
Логическое обоснование
Нормальный механизм завершения потока состоит в возвращении
Независимо от метода завершения потока любые обработчики отмены, которые были помещены в стек, но еще не извлечены из него, будут выполнены, а также вызваны деструкторы для любых существующих данных потока. Этот том стандарта IEEE Std 1003.1-2001 требует, чтобы обработчики отмены извлекались из стека и выполнялись по порядку. После выполнения всех обработчиков отмены для каждого элемента потоковых данных вызываются соответствующие функции деструкторов (в неопределенном порядке). Такая последовательность действий обязательна, поскольку обработчики отмены могут использовать данные потока.
Поскольку значение состояния выхода определяется приложением (за исключением случаев, когда поток был отменен, т.е. в случаях отмены используется значение PTHREAD_CANCELED), реализации не известно, что следует понимать под недействительным значением состояния, поэтому проверка на наличие ошибок не выполняется.
Будущие направления
Отсутствуют.
Смотри также
exit , pthread_create , pthread_join , том Base Definitions стан д арта IEEE Std 1003.1-2001, <pthread.h>.
Последовательность внесения изменений
Функция впервые реализована в выпуске Issue 5. Включена для со г ласования с расширение м POSIX Threads Extension.
Issue 6
Функция pthread_exit от м ече н а как часть опции Threads.
pthread_getconcurrency, pthread_setconcurrency
Имя
pthread_getconcurrency, pthread_setconcurrency — функции считывания и установки уровня параллелизма.
Синопсис
XSI
#include <pthread.h>
int pthread_getconcurrency (void);
int pthread_setconcurrency (int new_level);
Описание
Несвязанные потоки в процессе выполняются (или не выполняются) одновременно. По умолчанию реализация потоков гарантирует активность достаточного количества потоков для того, чтобы процесс мог успешно продолжать выполнение. И хотя такой подход сохраняет системные ресурсы, он может не обеспечить наиболее эффективный уровень параллелизма.
Функция pthread_setconcurrency позволяет приложению с помощью пара м етра new_level информировать реализацию потоков о желаемом уровне параллелизма. Реальный же уровень параллелизма, обеспечиваемый реализацией в результате вызова этой функции, не определен. Если значение параметра new_level равно нулю, это означает, что реализация должна поддерживать уровень параллелизма таким, как если бы функция pthread_setconcurrency никогда не вызывалась.