thread_pool_attr_t

Структура, характеризующая атрибуты пула потоков

Прототип:

#include <sys/dispatch.h>
typedef struct _thread_pool_attr {
THREAD_POOL_HANDLE_T *handle;
THREAD_POOL_PARAM_T *(*block_func)( THREAD_POOL_PARAM_T *ctp );
void (*unblock_func)( THREAD_POOL_PARAM_T *ctp );
int (*handler_func)( THREAD_POOL_PARAM_T *ctp );
THREAD_POOL_PARAM_T *(*context_alloc)( THREAD_POOL_HANDLE_T *handle );
void (*context_free)( THREAD_POOL_PARAM_T *ctp );
pthread_attr_t *attr;
unsigned short lo_water;
unsigned short increment;
unsigned short hi_water;
unsigned short maximum;
const char *tid_name;
unsigned reserved[7];
} thread_pool_attr_t;

Описание:

Тип позволяет определить атрибуты пула потоков, включая:

Структура включает следующие поля:

handle
Дескриптор, передающийся в функцию context_alloc.
block_func
Функция, которая вызывается когда рабочий поток переходит в заблокированное состояние, ожидая работы. Эта функция возвращает указатель, который передаётся в handler_func.
unblock_func
Функция, которая вызывается для разблокирования потоков. Если вы используете dispatch_block() в качестве block_func, то используйте dispatch_unblock() в качестве unblock_func.
handler_func
Функция, вызываемая после возврата из block_func, выполняющая некоторую работу. Функция передаётся как указатель, возвращаемый block_func.
context_alloc
Функция, вызываемая при создании нового потока пулом потоков. Получает handle. Функция возвращает указатель, который затем передаётся в block_func.
context_free
Функция, вызываемая при завершении рабочего потока для освобождения контекста, выделенного context_alloc.
attr
Указатель на функцию pthread_attr_*(), который передаётся в pthread_create(). Функция pthread_attr_*() задаёт размер стека, приоритет и прочие параметры рабочих потоков. Если NULL, то используются значения по умолчанию.
lo_water
Минимальное количество потоков, которое пул должен держать в заблокированном состоянии (т.е. потоки, готовые выполнять работу).
increment
Количество потоков, создаваемых за один раз.
hi_water
Максимальное количество потоков, которое пул должен держать в заблокированном состоянии.
maximum
Наибольшее количество потоков, которое может создать пул.
tid_name
NULL или указатель на нуль-терминированную строку имени потоков в пуле. Если задано, то эта строка передаётся в pthread_setname_np(), когда пул создаёт новый поток.

Note: Область видимости строки tid_name должна совпадать с временем жизни пула потоков. Следующий пример корректен:

pool_attr.tid_name = "fsys_resmgr";

но использование локальной или автоматической переменной, как показано ниже, некорректно:

{
char name[32];
snprintf( name, sizeof( name ), "cam %d:%d", cam.path, cam.target );
pool_attr.tid_name = name;
...
return;
}


Классификация:

ЗОСРВ «Нейтрино»

Тематические ссылки:

thread_pool_control(), thread_pool_create()




Предыдущий раздел: Описание API системной библиотеки