next up previous contents
Next: Размер стека в потоке. Up: Атрибуты потоков. Previous: Ограничения потока.   Contents

Дисциплина планирования потока.

Стандарт POSIX определяет несколько значений атрибута планирования:
SCHED_FIFO, SCHED_RR (Round Robin), или SCHED_OTHER (метод приложения). ДисциплиныSCHED_FIFO и SCHED_RR являются необязательными, и поддерживаются только для потоков в режиме реального времени.

Библиотека pthreads поддерживает только значение SCHED_OTHER. Попытка установить другое значение приведет к возникновению ошибки ENOSUP.

Для установки дисциплины диспетчеризации используется следующая функция:

#include <pthread.h>

pthread_attr_t tattr;

int ret;

ret = pthread_attr_setschedpolicy(&tattr, SCHED_OTHER);

Парной к ней является функция pthread_attr_getschedpolicy(), которая возвращает константу, определяющую дисциплину диспетчеризации.

Функция pthread_attr_setinheritsched() используется для наследования дисциплины диспетчеризации из родительского потока. Значение переменной inherit, равное PTHREAD_INHERIT_SCHED (по умолчанию) означает, что будет использована дисциплина планирования, определенная в создающем потоке, а любые атрибуты планирования, определенные в вызове pthread_create() будут проигнорированы. Если используется константа PTHREAD_EXPLICIT_SCHED, используются атрибуты, переданные в ввызове pthread_create().

Функция возвращает 0 при успешном завершении, и любое другое значение в случае ошибки. Пример вызова этой функции:

#include <pthread.h>

pthread_attr_t tattr;

int ret;

ret = pthread_attr_setinheritsched(&tattr, PTHREAD_EXPLICIT_SCHED);

Функцию pthread_attr_getinheritsched(pthread_attr_t *tattr, int *inherit) можно использовать для получения информации о дисциплине планирования текущего потока.

Параметры диспетчеризации определены в структуре sched_param; в настоящее время поддерживается только приоритет sched_param.sched_priority. Этот приоритет задается целым числом, при этом чем выше значение, тем выше приоритет потока при планировании. Создаваемые потоки получают этот приоритет.

Функция pthread_attr_setschedparam() используется, чтобы установить значения в этой структуре. При успешном завершении она возвращает 0. Пример использования:

#include <pthread.h>

pthread_attr_t tattr;

int newprio;

sched_param param;

/* устанавливает приоритет */

newprio = 30;

param.sched_priority = newprio;

/* устанавливает параметры диспетчеризации */

ret = pthread_attr_setschedparam (&tattr, &param);

Функция pthread_attr_getschedparam (pthread_attr_t *tattr,

const struct sched_param *param) используется для получения приоритета текущего потока.



2003-12-09