Создать поток
#include <pthread.h>int pthread_create( pthread_t *thread,const pthread_attr_t *attr,void * (*start_routine)( void * ),void *arg );
NULL
или указатель на объект pthread_t
, где функция может хранить идентификатор созданного потока.pthread_attr_t
, которая определяет атрибуты нового потока. Вместо прямой записи полей этой структуры следует использовать функции pthread_attr_init() и pthread_attr_set_*(). Если attr равен NULL
, то будут использоваться атрибуты по умолчанию (см. pthread_attr_init()). Атрибуты, измененные в структуре уже после создания потока на сам поток никак не влияют. |
libc
Функция pthread_create() создает новый поток с указанными в attr атрибутами. Новый поток наследует маску сигналов родителя, но список активных сигналов будет являться пустым.
|
Расширения ЗОСРВ «Нейтрино»
Если придерживаться стандарта POSIX, существует ряд атрибутов, которые нельзя определить до создания потока:
Функций pthread_attr_set_*() для этих атрибутов не существует.
В качестве расширений стандарта ЗОСРВ «Нейтрино» предлагает следующие флаги, которые можно через побитовое ИЛИ определить в поле __flags структуры pthread_attr_t
перед вызовом pthread_create():
После создания потока эти атрибуты можно переопределить с помощью функций pthread_setcancelstate() и pthread_setcanceltype().
Локальное хранилище потока (Thread Local Storage, TLS)
Каждый поток имеет локальное хранилище или TLS (thread local storage) для хранения потоко-специфичных данных. Получить указатель на эту область данных можно с помощью вызова __tls().
TLS определяется структурой struct _thread_local_storage.
Создание потока в состоянии "detached":
#include <stdio.h>#include <stdlib.h>#include <pthread.h>void * function( void *arg ){printf( "This is thread %d\n", pthread_self() );return (0);}int main( void ){pthread_attr_t attr;pthread_attr_init( &attr );pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );pthread_create( NULL, &attr, &function, NULL );/* Allow threads to run for 60 seconds. */sleep( 60 );return (EXIT_SUCCESS);}
POSIX 1003.1 Threads
struct _thread_local_storage, main(), pthread_attr_init(), pthread_exit(), pthread_setcancelstate(), pthread_setcanceltype(), sysconf(), __tls(), ThreadCreate()
Предыдущий раздел: Описание API системной библиотеки