struct _thread_attr

Структура, характеризующая атрибуты создаваемого потока

Прототип:

#include <sys/neutrino.h>
struct _thread_attr {
int __flags;
size_t __stacksize;
void *__stackaddr;
void (*__exitfunc)( void *__status );
int __policy;
struct sched_param __param;
unsigned __guardsize;
unsigned __prealloc;
int __spare[2];
}

Описание:

Тип позволяет модифицировать атрибуты создаваемого потока. Структура включает следующие поля:

__flags
Флаги потока. По умолчанию флаг установлен в ноль. В параметре flags может использоваться комбинация следующих флагов:
PTHREAD_CREATE_JOINABLE (default)
Перевести поток в состояние зомби при его завершении. Поток остаётся в этом состоянии пока не будет прочитан его код завершения или поток не будет отсоединён.
PTHREAD_CREATE_DETACHED
Создать обособленный поток; он не становится зомби. Вы не можете вызвать ThreadJoin() для обособленного потока.
PTHREAD_INHERIT_SCHED (default)
Наследовать атрибуты планирования создаваемого потока для нового потока.
PTHREAD_EXPLICIT_SCHED
Применить атрибуты и параметры планирования для нового потока из policy и param членов attr соответственно.
PTHREAD_SCOPE_SYSTEM (default)
Поток имеет масштаб системы.
PTHREAD_SCOPE_PROCESS
Не используйте этот флаг; ЗОСРВ «Нейтрино» реализует истинные потоки микроядра, которые имеют только системный масштаб.
PTHREAD_MULTISIG_ALLOW (default)
Если поток завершается из-за незаблокированного, необработанного сигнала, то завершить все потоки и, следовательно, процесс.
PTHREAD_MULTISIG_DISALLOW
Завершить только этот поток; все остальные потоки останутся незатронутыми.
PTHREAD_CANCEL_DEFERRED (default)
Завершение потока может произойти только в точках завершения, что описано в ThreadCancel().
PTHREAD_CANCEL_ASYNCHRONOUS
Каждая инструкция, исполненная потоком, рассматривается как точка завершения. POSIX и библиотека C не являются безопасными с точки зрения асинхронного завершения потоков.
__stacksize
Размер области стека потока определяемой stackaddr. Если stackaddr равен NULL, то stacksize определяет размер динамически выделяемого стека. Если stacksize равен нулю, то 4096 байт предполагается. Минимально допустимое значение stacksize определяется PTHREAD_STACK_MIN.
__stackaddr
NULL или адрес стека, который вы хотите использовать в потоке. Установите stacksize размер стека. Если вы предоставляете ненулевой stackaddr, то вы обязаны освободить эту область памяти после завершения потока. Если stackaddr равен NULL, тогда ядро динамически выделяет стек при создании потока и автоматически освобождает стек при завершении потока.
void (*__exitfunc)( void *status )
Адрес возврата, если функция потока поддерживает возврат.

Note: Поток возвращается к exitfunc. Это означает, что переменная статуса не передаётся, как обычный параметр. Вместо этого она появляется в регистре возврата, продиктованной соглашением о вызове ЦП (например EAX на x86, R3 на PPC, V0 на MIPS, и т. д.).

Функция exitfunc обычно должна иметь компиляторно- и процессорно-специфичную обработку доступа к данным status (извлекая их из регистра возврата в соответствующую локальную переменную). В качестве альтернативы вы можете написать функцию exitfunc на ассемблере для каждого ЦП.

__policy
Дисциплина планирования, определённая в SchedSet() вызове ядра. Этот член используется только если вы установили флаг PTHREAD_EXPLICIT_SCHED. Если вы хотите, чтобы поток наследовал дисциплину, но хотите задать параметры планирования в param, то установите флаг PTHREAD_EXPLICIT_SCHED и установите в policy значение SCHED_NOCHANGE.
__param
Структура struct sched_param, задающая параметры планирования, определённые в SchedSet() вызове ядра. Этот член используется только при установке флага PTHREAD_EXPLICIT_SCHED

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

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

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

struct sched_param, SchedSet(), ThreadCreate(), ThreadCreate_r()




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