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

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

int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void*(*start_routine)(void *), void *arg);

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

#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);

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

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

Создание потока с использованием аргумента атрибутов NULL оказывает тот же эффект, что и использование атрибута по умолчанию: оба создают одинаковый поток. При инициализации tattr он обретает поведение по умолчанию; pthread_create () возвращает 0 при успешном завершении. Любое другое значение указывает, что произошла ошибка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: