Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform | страница 32
>#include
>int pthread_create(pthread_t *thread,
> const pthread_attr_t *attr,
> void*(*start_routine)(void*), void *arg);
Функция pthread_create() имеет четыре аргумента :
thread | указатель на >pthread_t , где хранится идентификатор потока |
attr | атрибутная запись |
start_routine | подпрограмма, с которой начинается поток |
arg | параметр, который передается подпрограмме start_routine |
Отметим, что указатель thread и атрибутная запись (attr) — необязательные элементы, вы может передавать вместо них NULL.
Параметр thread может использоваться для хранения идентификатора вновь создаваемого потока. Обратите внимание, что в примерах, приведенных ниже, мы передадим NULL, обозначив этим, что мы не заботимся о том, какой идентификатор будет иметь вновь создаваемый поток.
Если бы нам было до этого дело, мы бы сделали так:
>pthread_t tid;
>pthread_create(&tid, ...
>printf("Новый поток имеет идентификатор %d\n", tid);
Такое применение совершенно типично, потому что вам часто может потребоваться знать, какой поток выполняет какой участок кода.
Новый поток начинает выполнение с функции start_routine(), с параметром arg.
Когда вы осуществляете запуск нового потока, он может следовать ряду четко определенных установок по умолчанию, или же вы можете явно задать его характеристики.
Прежде, чем мы перейдем к обсуждению задания атрибутов потока, рассмотрим тип данных >pthread_attr_t
:
>typedef struct {
> int flags;
> size_t stacksize;
> void *stackaddr;
> void (*exitfunc)(void *status);
> int policy;
> struct sched_param param;
> unsigned guardsize;
>} pthread_attr_t;
В основном эти поля используются как:
flags | Неисчисляемые (булевы) характеристики потока — например, создается поток как «обособленный» или «синхронизирующий». |
stacksize, stackaddr и guardsize | Параметры стека. |
exitfunc | Функция, выполняемая перед завершением потока. |
policy и param | Параметры диспетчеризации. |
Доступны следующие функции:
Управление атрибутами
pthread_attr_destroy()
pthread_attr_init()
Флаги (булевы характеристики)
pthread_attr_getdetachstate()