ВУЗ:
Составители:
219
жет быть вызвана повторно в то время, когда она уже вызвана. Такие
функции используют локальные переменные (и локально выделенную
память) в тех случаях, когда их нереентерабельные аналоги могут вос-
пользоваться глобальными переменными.
Завершение функции потока происходит в следующих случаях:
функция потока вызвала функцию pthread_exit;
функция потока достигла точки выхода;
поток был досрочно завершен другим потоком или процессом.
Функция pthread_exit объявлена в заголовочном файле <pthread.h>
и ее сигнатура имеет вид:
void pthread_exit(void *retval)
Аргументом функции является указатель на возвращаемый объект.
Нельзя возвращать указатель на стековый (нединамический) объект,
объявленный в теле функции потока, либо на динамический объект, со-
здаваемый и удаляемый в теле функции, т. к. после завершения потока
все стековые объекты его функции удаляются. В итоге указатель будет
содержать адрес памяти с неопределенным содержимым, что может
привести к серьезной ошибке.
В случае, если необходимо дождаться завершения потока в теле ро-
дительского процесса, вызывается функция pthread_join следующего
вида:
int pthread_join(pthread_t th, void** thread_return)
Первый аргумент th необходим для указания ожидаемого потока,
значение этого аргумента определяется в результате выполнения функ-
ции pthread_create. В качестве второго аргумента thread_return выступа-
ет указатель на аргумент функции pthread_exit либо NULL, если поток
ничего не возвращает.
8.2.4 Досрочное завершение потока
Функции потоков можно рассматривать как вспомогательные про-
граммы, находящиеся под управлением функции main. Точно так же,
как при управлении процессами иногда возникает необходимость до-
срочно завершить процесс, многопоточной программе может понадо-
биться досрочно завершить один из потоков. Для досрочного заверше-
ния потока можно воспользоваться функцией pthread_cancel:
int pthread_cancel(pthread_t thread)
Единственным аргументом этой функции является идентификатор
потока – thread. Функция pthread_cancel возвращает 0 в случае успеха и
ненулевое значение (код ошибки) в случае ошибки.
Страницы
- « первая
- ‹ предыдущая
- …
- 217
- 218
- 219
- 220
- 221
- …
- следующая ›
- последняя »
