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


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


листинг 1.12), которая, правда, является новой и в исторически сложившихся реализациях может отсутствовать.

#include <pthread.h> int pthread_setschedprio ( pthread_t thread, int prio);

Листинг 1.12. Описание функции pthread_setschedprio().

Сходную направленность, но более глобальный характер имеют функции pthread_getconcurrency() и pthread_setconcurrency() (см. листинг 1.13), позволяющие опросить и изменить уровень параллелизма выполнения потоков управления.

#include <pthread.h>

int pthread_getconcurrency (void);

int pthread_setconcurrency (int new_level);

Листинг 1.13. Описание функций pthread_getconcurrency() и pthread_setconcurrency().

По умолчанию операционная система предоставляет возможность параллельно проявлять активность некоему "достаточному числу" потоков управления в процессе, так, чтобы это не вело к перерасходу системных ресурсов. Некоторым приложениям, однако, может требоваться более высокий уровень параллелизма; это требование они могут передать ОС в виде значения аргумента new_level функции pthread_setconcurrency(). Впрочем, с точки зрения операционной системы это всего лишь просьба или рекомендация; стандарт не специфицирует реально устанавливаемый уровень.

Нулевое значение аргумента new_level означает переход к подразумеваемому уровню параллелизма, как если бы функция pthread_setconcurrency() ранее не вызывалась.

Функция pthread_getconcurrency() в качестве результата возвращает значение уровня параллелизма, установленное предыдущим вызовом pthread_setconcurrency(). Если такового не было, выдается нуль.

Отметим, что изменение уровня параллелизма не рекомендуется использовать при реализации библиотечных функций, так как это может конфликтовать с запросами приложений.

К числу атрибутов потока управления можно отнести обслуживающие его часы процессорного времени. Для выяснения их идентификатора достаточно обратиться к функции pthread_getcpuclockid() (см. листинг 1.14).

#include <pthread.h> #include <time.h>

int pthread_getcpuclockid ( pthread_t thread_id, clockid_t *clock_id);




Начало  Назад  Вперед



Книжный магазин