Я пытаюсь написать полупереносимый класс многопоточности для проекта, над которым я работаю, и, пытаясь установить приоритет потока, я столкнулся с загадкой в мире 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 и т. д.).
Поскольку моей главной заботой является только попытка получить действительный диапазон значений приоритетов (чтобы убедиться, что пользователь не вводит слишком высокое или низкое значение), я должен даже не беспокоиться о приоритете текущего процесса и получить только минимальные/максимальные значения для SCHED_FF
или SCHED_RR
, поскольку эти значения, кажется, дают мне допустимые диапазоны для различных систем Linux/Unix, с которыми я сталкивался, или я полностью упускаю суть?
Заранее спасибо. Пожалуйста, дайте мне знать, если я что-то неясно или исказил.
РЕДАКТИРОВАТЬ 1: обратите внимание, что меня больше всего беспокоит «портативный» способ получить допустимые диапазоны больше, чем приоритет самого процесса.. спасибо!