Вход/Регистрация
Параллельное и распределенное программирование на С++
вернуться

Хьюз Камерон

Шрифт:

// assign priority value to sched_param structure

SchedParam.sched_priority = MidPriority;

// set attribute object with scheduling parameter

pthread_attr_setschedparam(&Attr1,&SchedParam);

// set scheduling attributes to be determined by attribute object

pthread_attr_setinheritsched(&Attr1,PTHREAD_EXPLICIT_SCHED);

// set scheduling policy

pthread_attr_setschedpolicy(&Attr1,SCHED_RR);

// create thread with scheduling attribute object

pthread_create(&ThreadA,&Attr1,task2,Value);

}

В листинге 4.4 стратегия планирования и приоритет потока ThreadA устанавливаются с использованием атрибутного объекта SchedAttr. Выполним следующие действия.

1. Инициализируем атрибутный объект.

2. Считаем минимальное и максимальное значения приоритета для стратегии планирования.

3. Вычислим значение приоритета.

4. Запишем значение приоритета в структуру sched_param.

5. Установим атрибутный объект.

6. Обеспечим установку атрибутов планирования с помощью атрибутного объекта.

7. Установим стратегию планирования.

8. Создадим поток с помощью атрибутного объекта.

Последовательное выполнение этих действий позволяет установить стратегию планирования и приоритет потока до его создания. Для динамического изменения стратегии планирования и приоритета используйте функции pthread_setschedparam и pthread_setschedprio.

Синопсис

#include <pthread.h>

int pthread_setschedparam(pthread_t thread,

int policy,

const struct sched_param *param);

int pthread_getschedparam(

pthread_t thread,

int *restrict policy,

struct sched_param *restrict param);

int pthread_setschedprio(pthread_t thread, int prio);

Функция pthread_setschedparam устанавливает как стратегию планирования, так и приоритет потока без использования атрибутного объекта. Параметр thread содержит идентификатор потока, параметр policy — новую стратегию планирования и параметр param — значения, связанные с приоритетом. Функция pthread_getschedparam сохраняет значения стратегии планирования и приоритета в параметрах policy и param соответственно. При успешном выполнении обе функции возвращают число 0 , в противном случае — код ошибки. Условия, при которых эти функции могут завершиться неудачно, перечислены в табл. 4.7.

Таблица4.7. Условия потенциального неудачного завершения функций установки стратегии планирования и приоритета

Функции

Условия отказа

pthread_getschedparam

• Параметр thread не ссылается на существующий поток

pthread_setschedparam

• Некорректен параметр policy или один из членов структуры, на которую указывает параметр param

• Параметр policy или один из членов структуры, на которую указывает параметр param, содержит значение, которое не поддерживается в данной среде

• Вызывающий поток не имеет соответствующего разрешения на установку значений приоритета или стратегии планирования для заданного потока

• Параметр thread не ссылается на существующий поток

• Данная реализация не позволяет приложению заменить один из параметров планирования заданным значением

pthread_setschedprio

• Параметр prio не подходит к стратегии планирования заданного потока

• Параметр prio имеет значение, которое не поддерживается в данной среде

• Вызывающий поток не имеет соответствующего разрешения на установку приоритета для заданного потока

• Параметр thread не ссылается на существующий поток

• Данная реализация не позволяет приложению заменить значение приоритета заданным

Функция pthread_setschedprio используется для установки значения приоритета выполняемого потока, идентификатор которого задан параметром thread В результате выполнения этой функции текущее значение приоритета будет заменено значением параметра prio. При успешном выполнении функция возвращает число 0 в противном случае — код ошибки. При неуспешном выполнении функции приоритет потока изменен не будет. Условия, при которых эта функция может завершиться неуспешно, также перечислены в табл. 4.7.

  • Читать дальше
  • 1
  • ...
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: