The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование в Linux" / Оглавление документа
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) используется для получения приоритета текущего потока.



2004-06-22

АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList