ВУЗ:
Составители:
56
Спецификация POSIX 1003.1c требует, чтобы все потоки многопо-
точного приложения имели один идентификатор, однако в Linux у каж-
дого процесса, в том числе и у процессов-потоков, есть свой идентифи-
катор.
Основные функции для работы с потоками
Для работы с потоками используются следующие основные функ-
ции:
• pthread_create – создание потока;
• pthread_join – блокирование работы вызвавшего функцию про-
цесса или потока в ожидании завершения потока;
• pthread_cancel – досрочное завершение потока из другого пото-
ка или процесса;
• pthread_exit – завершает поток, код завершения передается
функции pthread_join. Данная функция подобна функции exit, однако
вызов exit в «основном» процессе программы приведет к завершению
всей программы.
Запуск и завершение потока
Потоки создаются функцией pthread_create, имеющей следующую
сигнатуру:
int pthread_create (pthread_t* tid, pthread_attr_t* attr,
void*(*function)(void*), void* arg)
Данная функция определена в заголовочном файле <pthread.h>.
Первый параметр этой функции представляет собой указатель на пере-
менную типа pthread_t, которая служит идентификатором создаваемого
потока. Второй параметр – указатель на переменную типа pthread_attr_t –
используется для установки атрибутов потока. Третьим параметром
функции pthread_create должен быть адрес функции потока. Эта функ-
ция играет для потока ту же роль, что функция main для главной про-
граммы. Четвертый параметр функции pthread_create имеет тип void*.
Этот параметр может использоваться для передачи значения в функцию
потока. Вскоре после вызова pthread_create функция потока будет за-
пущена на выполнение параллельно с другими потоками программы.
Новый поток запускается не сразу после вызова pthread_create, по-
тому что перед тем, как запустить новую функцию потока, нужно вы-
полнить некоторые подготовительные действия, а поток-родитель при
этом продолжает выполняться. Необходимо учитывать данное обстоя-
тельство при разработке многопоточного приложения, в противном
случае возможны серьезные ошибки при выполнении программы. Если
Страницы
- « первая
- ‹ предыдущая
- …
- 54
- 55
- 56
- 57
- 58
- …
- следующая ›
- последняя »