Мобильное программирование приложений реального времени в стандарте POSIX




Опрос и изменение атрибутов потоков управления - часть 5


листинг 1.9).

#include <pthread.h>

int pthread_attr_getinheritsched ( const pthread_attr_t *restrict attr, int *restrict inheritsched);

int pthread_attr_setinheritsched ( pthread_attr_t *attr, int inheritsched);

Листинг 1.9. Описание функций pthread_attr_getinheritsched() и pthread_attr_setinheritsched().

Атрибут обособленности потока управления, присутствующий в атрибутном объекте, можно опросить и установить посредством функций pthread_attr_getdetachstate() и pthread_attr_setdetachstate() (см. листинг 1.10).

#include <pthread.h>

int pthread_attr_getdetachstate ( const pthread_attr_t *attr, int *detachstate);

int pthread_attr_setdetachstate ( pthread_attr_t *attr, int detachstate);

Листинг 1.10. Описание функций pthread_attr_getdetachstate() и pthread_attr_setdetachstate().

Напомним, что значение этого атрибута (PTHREAD_CREATE_DETACHED или PTHREAD_CREATE_JOINABLE) определяет, будет ли поток управления создан как обособленный или присоединяемый, то есть доступный другим потокам для ожидания завершения. Подразумеваемым является значение PTHREAD_CREATE_JOINABLE.

Значения атрибутов планирования могут задаваться не только при создании потока управления. Стандарт POSIX-2001 предоставляет средства для их динамического изменения и опроса (см. листинг 1.11).

#include <pthread.h>

int pthread_getschedparam ( pthread_t thread, int *restrict policy, struct sched_param *restrict param);

int pthread_setschedparam ( pthread_t thread, int policy, const struct sched_param *param);

Листинг 1.11. Описание функций pthread_getschedparam() и pthread_setschedparam().

Отметим две тонкости, связанные с функцией pthread_setschedparam(). Во-первых, возможно, что для ее успешного вызова процесс должен обладать соответствующими привилегиями. Во-вторых, реализация не обязана поддерживать динамический переход к политике спорадического планирования (SCHED_SPORADIC) (как, впрочем, и саму эту политику).

Если требуется изменить лишь приоритет планирования, не меняя политику, проще воспользоваться функцией pthread_setschedprio() (см.


Содержание  Назад  Вперед