Вопрос по linux, c++ – pthread sched_get_priority_min / max реализация для SCHED_OTHER / SCHED_FIFO

5

Я пытаюсь написать полупереносимый класс потоков для проекта, над которым я работаю, и, пытаясь установить приоритет потока, я натолкнулся на загадку в мире pthread.

Учитывая следующий код:

#include <stdio.h>
#include <unistd.h>
#include <sched.h>
main()
{
    printf("Valid priority range for SCHED_OTHER: %d - %d\n",
        sched_get_priority_min(SCHED_OTHER),
        sched_get_priority_max(SCHED_OTHER));
    printf("Valid priority range for SCHED_FIFO: %d - %d\n",
        sched_get_priority_min(SCHED_FIFO),
        sched_get_priority_max(SCHED_FIFO));
    printf("Valid priority range for SCHED_RR: %d - %d\n",
        sched_get_priority_min(SCHED_RR),
        sched_get_priority_max(SCHED_RR));
}

В OpenBSD это напечатало бы следующее:

Valid priority range for SCHED_OTHER: 0 - 31
Valid priority range for SCHED_FIFO: 0 - 31
Valid priority range for SCHED_RR: 0 - 31

В Ubuntu это выдает это:

Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: 1 - 99
Valid priority range for SCHED_RR: 1 - 99

Мой вопрос больше касаетсяSCHED_OTHER приоритет. Согласно всей документации, которую я смог собрать (sched.h, google, SO, SE), я понимаю, что нужно попытаться получить приоритет процесса текущего процесса и назначить приоритет на его основе. Это нормально, за исключением случаев получения минимальных / максимальных значений дляSCHED_OTHER, Поскольку планирование зависит от системы, если я получу приоритет текущего процесса какSCHED_OTHER и попробуйте получить минимальные / максимальные значения в Ubuntu (или в других системах Linux, с которыми я сталкивался), мои значения будут 0-0, что не поможет при попытке установить допустимый диапазон приоритетов. Тем не менее, я получаю действительные значения дляSCHED_OTHER в других Unix-подобных системах (OpenBSD и т. д.).

Поскольку моя главная задача - только попытаться получить действительный диапазон значений приоритетов (чтобы гарантировать, что пользователь не вводит слишком высокое или низкое значение), не стоит ли мне даже беспокоиться о текущем процессе & apos; приоритет и получить только минимальные / максимальные значения дляSCHED_FF или жеSCHED_RR поскольку эти значения дают мне допустимые диапазоны для различных систем linux / unix, с которыми я столкнулся, или я полностью упускаю суть?

Заранее спасибо, и, пожалуйста, дайте мне знать, если я что-то неясно или неверно представляю.

EDIT 1Пожалуйста, обратите внимание, что моя главная проблема связана с «портативным» способ получить действительные диапазоны больше, чем процесс & apos; сам приоритет .. спасибо!

Ваш Ответ

1   ответ
4

Диапазон приоритетов, которые вы получаете в Ubuntu (как и в любой другой ОС на базе Linux) для SCHED_OTHER, составляет [0,0], чтоis допустимый диапазон. Это означает, что все эти процессы не в реальном времени имеют одинаковый «приоритет»; и их единственное отличие заключается в их "хорошем" значение.

Увидетьотлично Системный вызов для получения дополнительной информации. Я не уверен, как работает планировщик OpenBSD, но системный вызов nice () находится в POSIX и должен поддерживаться в системах UNIX.

Error: User Rate Limit Exceeded txtechhelp

Похожие вопросы