Операционные системы. Замятин А.В - 57 стр.

UptoLike

Составители: 

57
при создании потока возникла ошибка, то функция pthread_create воз-
вращает ненулевое значение, соответствующее номеру ошибки.
Функция потока должна иметь сигнатуру вида
void* func_name(void* arg)
Имя функции может быть любым. Аргумент arg является указате-
лем, который передается в последнем параметре функции
pthread_create. Функция потока может вернуть значение, которое затем
может быть обработано другим потоком или процессом.
Функция, вызываемая из функции потока, должна обладать свойст-
вом реентерабельности (этим же свойством должны обладать рекурсив-
ные функции). Реентерабельная функция это функция, которая может
быть вызвана повторно в то время, когда она уже вызвана. Такие функ-
ции используют локальные переменные (и локально выделенную па-
мять) в тех случаях, когда их нереентерабельные аналоги могут вос-
пользоваться глобальными переменными.
Завершение функции потока происходит в следующих случаях:
функция потока вызвала функцию 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, если поток
ничего не возвращает.