Параллельное и распределенное программирование на С++
Шрифт:
Функция pthread_getconcurrency возвращает значение, установленное в результате предыдущего обращения к функции pthread_setconcurrency . Если «предыдущего» вызова этой функции не было, функция pthread_getconcurrency возвращает нуль, который означает, что реализация поддерживает заданный уровень параллелизма.
Обращение к функции pthread_setconcurrency информирует реализацию о желаемом уровне параллелизма, а реализация использует его как совет, а не требование.
Если реализация не поддерживает мультиплексирование пользовательских потоков, то функции pthread_setconcurrency и pthread_getconcurrency используются ради совместимости исходного кода, но не дают никакого эффекта при вызове. Для поддержки семантики функций параметр new_level сохраняется при вызове функции pthread_setconcurrency ,
Возвращаемые значения
При успешном выполнении функция pthread_setconcurrency возвращает нулевое значение; в противном случае — код ошибки, обозначающий ее характер.
Функция pthread_getconcurrency всегда возвращает уровень параллелизма, установленный в результате предыдущего обращения к функции pthread_setconcurrency . Если «предыдущего» вызова этой функции не было, функция pthread_getconcurrency возвращает нуль.
Ошибки
Фу н кци я pthread_setconcurrency завершится неудачно, если:
[EINVAL ] значение, заданное пара м етро м new_level , отрицательно;
[EAGAIN] значение, заданное пара м етро м new_level, приводит к перерасхолу систе м ных ресурсов.
Эти функции не возвращают код ошибки [EINTR].
Примеры
Отсутствуют.
Замечания по использованию
Использование этих функций изменяет состояние базового уровня параллелизма, от которого зависит работа приложения. Разработчикам библиотек рекомендуется не использовать функции pthread_getconcurrency и pthread_setconcurrency, поскольку это может привести к конфликту с их использованием в приложении.
Логическое обоснование
Отсутствует.
Будущие направления
Отсутствуют.
Смотри также
То м Base Definitions стандарта IEEE Std 1003.1-2001, <pthread.h>.
Последовательность внесения изменений
Функции впервые реализованы в выпуске Issue 5.
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 пре д назначена для считывания значения стратегии пла н ирования и пара м етров планирования для потока, идентификационный но м
Параметр ро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 возвра щ ают нулевое значение; в противно м случае — кодошибки, обозначаю щ ий ее характер.