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




Пример 1.16


/* * * * * * * * * * * * * * * * * * * * * * * * * * */

/* Программа опрашивает атрибуты потоков управления */

/* и изменяет некоторые из них */

/* * * * * * * * * * * * * * * * * * * * * * * * * * */

#define _XOPEN_SOURCE 600

#include

#include

#include

#include

int main (void) {

pthread_t ct_id; /* Идентификатор текущего потока управления */

pthread_attr_t patob; /* Атрибутный объект для создания потоков управления */

int res; /* Переменная для запоминания результатов "потоковых" функций */

void *stackaddr; /* Начало стека как атрибут потока управления */

size_t atrsize; /* Размеры как атрибуты потока управления */

/* Структура с параметрами планирования */

struct sched_param shdprm;

char *spname; /* Названия политики планирования, области */

/* планирования конкуренции и т.п. */

printf ("Идентификатор текущего потока управления: %lx\n",

(ct_id = pthread_self ()));

if ((errno = pthread_attr_init (&patob)) != 0) {

perror ("PTHREAD_ATTR_INIT");

return (errno);

}

printf ("Значения, установленные системой "

"в атрибутном объекте\n");

if ((errno = pthread_attr_getstack (&patob, &stackaddr,

&atrsize)) != 0) {

perror ("PTHREAD_ATTR_GETSTACK");

return (errno);

}

printf ("Адрес начала стека: %p\n", stackaddr);

printf ("Размер стека: %d\n", atrsize);

assert (pthread_attr_getguardsize (&patob, &atrsize) == 0);

printf ("Размер защитной области: %d\n", atrsize);

assert (pthread_attr_getschedparam (&patob, &shdprm) == 0);

assert (pthread_attr_getschedpolicy (&patob, &res) == 0);

switch (res) {

case SCHED_FIFO:

spname = "Планирование по очереди";

break;

case SCHED_RR:

spname = "Циклическое планирование";

break;

case SCHED_OTHER:

spname = "Прочее планирование";

break;

default:

spname = "Неизвестная политика планирования";

}

printf ("Политика планирования: %s\n", spname);




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