pthread_getschedparam, pthread_setschedparam
Имя
pthread_getschedparam, pthread_setschedparam — функции динамического доступа к параметрам стратегии планирования потока (REALTIME THREADS).
Синопсис
THR TPS
#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);
Описание
Функции pthread_getschedparam() и pthread_setschedparam() используются для считывания и установки соответственно значений стратегии планирования и параметров отдельных потоков многопоточного процесса. Для значений стратегии планирования SCHED_FIFO и SCHED_RR в структуре sched_param должен быть установлен только один ее член sched_priority [27] (уровень приоритета). Для значения SCHED_OTHER параметры планирования определяются реализацией.
Функция pthread_getschedparam() пре д назначена для считывания значения стратегии пла н ирования и пара м етров планирования для потока, идентификационный но м ер (ID) которого задан пара м етро м thread. Считанные значения сохраняются в пара м етрах policy и param. Функция pthread_getschedparam() возвра щ ает значение приоритета, установленное в результате са м ого последнего вызова функций pthread_setschedparam(), pthread_setschedprio() или pthread_create () для данного потока. Она не отражает никаких временных корректировок, вносимых в значение приоритета в результате выполнения других функций. Функция pthread_setschedparam() устанавливает для потока, ID которого за д ан пара м етро м thread, стратегию планирования и соответствую щ ие пара м етры планирования равны м и значения м пара м етров policy и nparam соответственно.
Параметр роlicy м ожет и м еть значения SCHED_OTHER, SCHED_FIFO или SCHED_RR. Параметры планирования для стратегии планирования, заданной значением SCHED_OTHER, определяются реализацией. Для страте г ии планирования, задавае м ой значения м и SCHED_FIFO и SCHED_RR, используется только один пара м етр priority.
TSP
Если определено значение _POSIX_THREAD_SPORADIC_SERVER, аргу м ент роlicy может иметь значение SCHED_SPORADIC (за исключение м функции pthread_setschedparam()). Если стратегия планирования в момент вызова этой функции не соответствовала значению SCHED_SPORADIC, то поддержка этого значения определяется реализацией, т.е. реализация может не позволить приложению динамически изменять стратегию планирования, устанавливая ee равной значению SCHED_SPORADIC. Для стратегии планирования, определяе м ой значение м SCHED_SPORADIC, устанавливаются такие пара м етры: sched_ss_low_priority, sched_ss_repl_period, sched_ss_init_budget, sched_priority и sched_ss_max_repl. Для успешного выполнения фу н кции установки пара м етров значение пара м етра sched_ss_repl_period должно быть больше или равно значению sched_ss_init_budget; в противном случае функция завершится неудачно. Кро м е того, для успешного выполнения этой функции значение пара м етра sched_ss_max_repl должно попадать во включающий диапазон [1, SS_REPL_MAX] ; в противном случае функция завершится неудачно.
При неудачном завершении функции pthread_setschedparam() параметры планирования для заданного потока изменены не будут.
Возвращаемые значения
П ри успешно м завершении функции pthread_getschedparam() Hpthread_setschedparam() возвра щ ают нулевое значение; в противно м случае — кодошибки, обозначаю щ ий ее характер.
Ошибки
Функци я pthread_getschedparam () м ожет завершитьс я неудачно, если:
[ESRCH] з н ачение, заданное пара м етро м thread, не относится ни к од-
ному из существующих потоков.
Функция pthread_setschedparam() может завершиться неудачно, если:
[EINVAL] значение, заданное параметром policy, или значение одного из параметров планирования, связанных со значением стратегии планирования policy, недействительно;
была сделана попытка установить для стратегии планирования или ее параметров неподдерживаемые значения;
была сделана попытка динамически изменить стратегию планирования, установив для нее значение SCHED_SPORADIC, при том, что реализация не поддерживает такое изменение;
инициатор вызова не имеет соответствующего разрешения устанавливать параметры планирования или стратегию планирования для заданного потока;
реализация не позволяет приложению модифицировать один из параметров в соответствии с заданным значением;
значение, заданное пара м етро м thread, не относится ни к одному из существующих потоков.
Эти функции не возвращают код ошибки [EINTR].
[ENOTSUP]
TSP [ENOTSUP]
[EPERM]
[EPERM]
[ESRCH]
Примеры
Отсутствуют.
Замечания по использованию
Отсутствуют.
Логическое обоснование
Отсутствует.
Будущие направления
Отсутствуют.
Смотри также
pthread_setschedprio (), sched_getparam(), sched_getscheduler (), то м Base Definitions craHjapTaIEEEStd 1003.1-2001, <pthread.h>, <sched.h>.
Последовательность внесения изменений
Функции впервые реализованы в выпуске Issue 5. Включены для согласования с расширением POSIX Threads Extension.
Issue 6
Функции pthread_getschedparam() и pthread_setschedparam() от м ечены как часть опций Threads и Thread Execution Scheduling.
Код ошибки [ENOSYS] был исключен, поскольку е г о нет с м ысла учитывать, если реализация не под д ерживает опцию Thread Execution Scheduling.
К описанию прототипа функции pthread_setschedparam() был приложен список опечаток Open Group Corrigendum U026/2, чтобы второй ар г у м ент этой функции и м ел тип int.
Для согласования со стандартом IEEE Std 1003.1d-1999 было добавлено значение стратегии планирования SCHED_SPORADIC.
В целях согласования со стандартом ISO/IEC 9899: 1999 в прототип функции pthread_getschedparam () было добавлено ключевое слово restrict.
Был добавлен список опечаток Open Group Corrigendum U047/1.
Быладобавлена интерпретация IEEE PASC 1тегрге1а1юп 1003.1 #96, отмечающая» что значения приоритета также можно установить путем вызова функции pthread_setschedprio().
Больше книг — больше знаний!
Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ