next up previous contents
Next: Ожидание завершения потока. Up: Потоки (threads). Previous: Потоки уровня ядра.   Contents

Создание потока.

Функция pthread_create() позволяет добавить новый поток управления к текущему процессу. Прототип функции:

int pthread_create(pthread_t *tid, const pthread_attr_t *tattr,

           void*(*start_routine)(void *), void *arg);

Когда атрибуты объекта не определены, они равны NULL, и поток, создаваемый по умолчанию, имеет следующие признаки: неорганиченность, неотделенность от процесса, стек с размером по умолчанию, приоритет родителя. Существует возможность также создать объект атрибутов потока с помощью функции pthread_attr_init(), а затем использовать этот объект для создания самого потока. Пример создания потока приведен ниже (рис. 24):

#include <pthread.h>

pthread_attr_t tattr;

pthread_t tid;

extern void *start_routine(void *arg);

void *arg;

int ret;

/* поведение по умолчанию*/

ret = pthread_create(&tid, NULL, start_routine, arg);

/* инициализация с атрибутами по умолчанию */

ret = pthread_attr_init(&tattr);

/* определение поведения по умолчанию*/

ret = pthread_create(&tid, &tattr, start_routine, arg);

Рис. 24. Создание потока.

Функция pthread_create() вызывается с атрибутом attr, определяющим необходимое поведение. start_routine - это функция, с которой новый поток начинает свое выполнение. Когда start_routine завершается, поток завершается со статусом выхода, установленным в значение, возвращенное start_routine.

Если вызов pthread_create() успешно завершен, идентификатор созданного потока сохраняется по адресу tid.

Создание потока с использованием аргумента атрибутов NULL оказывает тот же эффект, что и использование атрибута по умолчанию; оба создают поток по умолчанию. При инициализации tattr он получает поведение по умолчанию.

pthread_create() возвращает 0 при успешном завершении. Любое другое значение указывает, что произошла ошибка.



2003-12-09