(void) pthread_create(&th2, NULL, incer, &sb2);
(void) pthread_join(thl, NULL);
(void) pthread_join(th2, NULL);
return 0;
}
Замечания по использованию
Отсутствуют.
Логическое обоснование
Функция pthread_join() представляет собой удобное и полезное средство для использования в многопоточных приложениях. Конечно, программист мог бы сымитировать эту функцию, если бы она не существовала, другими средствами, например, путем передачи функции start_routine () дополнительного состояния как части аргумента. Завершающийся поток в этом случае установил бы флаг, означающий завершение, и отправил бы условную переменную, которая является частью этого состояния, а присоединяющий поток ожидал бы получения этой условной переменной. Несмотря на то что такой метод позволил бы организовать ожидание наступления более сложных условий (например, завершения сразу нескольких потоков), ожидание завершения одного потока— весьма распространенная ситуация, и поэтому «заслуживает» отдельной функции. Кроме того, включение в библиотеку функции pthread_join () никоим образом не мешает программисту самому кодировать такие сложные ожидания. Таким образом, включение функции pthread_join () в этот том стандарта IEEE Std 1003.1-2001 считается весьма полезным.
Функция pthread_join() обеспечивает простой механизм, позволяющий приложению ожидать завершения потока. После того как поток завершится, приложение может приступать к освобождению ресурсов, которые использовались этим потоком.
Например, после возвращения функции pthread_join () может быть восстановлена любая область памяти, предоставленная приложением под стек.
Функции pthread_join () или pthread_detach () должны в конце концов быть вызваны для каждого потока, который создается с атрибутом detachstate, равным значению PTHREAD_CREATE_JOINABLE , чтобы
Взаимодействие между функцией pthread_join () и механизмом отмены потока хорошо определено по следующим причинам:
• функция pthread_join (), как и все остальные не асинхронные функции безопасной отмены потоков, можно вызывать только при возможности отложенного типа отмены.
• отмена потока не может происходить в состоянии запрещения отмены.
Таким образом, имеет смысл рассматривать только стандартное состояние возможности отмены. Итак, вызов функции pthread_join() либо отменяется, либо успешно завершается. Для приложения это различие очевидно, поскольку либо выполняется обработчик запроса на отмену, либо возвращается функция pthread_join (). В этом случае условия «гонок» не возникают, поскольку функция pthread_join() вызывается в состоянии отложенного запроса на отмену.
Будущие направления
Отсутствуют.
Смотри также
pthread_create(), wait(), том Base Definitions стандарта IEEE Std 1003.1-2001,
Последовательность внесения изменений
Функция впервые реализована в выпуске Issue 5. Включена для согласования с расширение
Issue 6
Функция pthread_join () отмечена как часть опции Threads.
Имя
pthread_mutex_destroy, pthread_mutex_init — функции разруше
Синопсис
THR
#include
int pthread_mutex_destroy (pthread_mutex_t *^utex);
int pthread_mutex_init (
pthread_mutex_t *restrict jnutex,
const pthread_mutexattr_t *restrict attr);
pthread_mutex_t
Описание
Функция pthread_mutex_destroy () используется для разрушения объекта мьютекса, адресуемого параметром mutex, в результате чего этот объект мьютекса становится неинициализированным. В конкретной реализации функция pthread_mutex_destroy () может устанавливать объект, адресуемый параметром
Нет никакой опасности в разрушении инициализированного объекта мьютекса, по которому не заблокирован в данный момент ни один поток. Попытка же разрушить заблокированный мьютекс может привести к неопределенно