URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5785
[ Назад ]

Исходное сообщение
"Pthreads. Задание приоритета потоку"

Отправлено vdv , 06-Окт-06 11:42 
Всем привет. Пишу вот мультипоточную прогу и столкнулся с небольшой проблемой,
а именно: не получается изменить приоритет потоку.
изменяю приоритет слудующим образом:

.......
struct sched_param param;
int policy = SCHED_OTHER;
int rc;
pthread_t thread;
.......
rc = pthread_create(&thread,NULL,thread_func,NULL);
.....
param.sched_priority = -1;
rc = pthread_setschedparam(thread,policy,¶m);
// тут rc == EINVAL, а это значит, что или неверное policy
//или значение priority для этого policy задано неверно
.........
rc = pthread_getschedparam(thread,&policy,¶m);
printf("%d\n", param.sched_priority);
// убеждаюсь, что priority не изменилось
// как было до этого ноль, так и осталось
.........

Прога компилится на системе Suse Linux 10.0, gcc 4.0.2.

Вопрос, возможно ли вообще изменить приоритет потоку? И если да, то как?


Содержание

Сообщения в этом обсуждении
"Pthreads. Задание приоритета потоку"
Отправлено Ganduras , 06-Окт-06 12:27 
>rc = pthread_create(&thread,NULL,thread_func,NULL);
>.....
>param.sched_priority = -1;
>rc = pthread_setschedparam(thread,policy,param);
>// тут rc == EINVAL, а это значит, что или неверное policy
>
>//или значение priority для этого policy задано неверно

скорее всего не понимает именно -1 в значениях


"Pthreads. Задание приоритета потоку"
Отправлено kuzmi4 , 06-Окт-06 12:42 
>>rc = pthread_create(&thread,NULL,thread_func,NULL);
>>.....
>>param.sched_priority = -1;
>>rc = pthread_setschedparam(thread,policy,param);
>>// тут rc == EINVAL, а это значит, что или неверное policy
>>
>>//или значение priority для этого policy задано неверно
>
>скорее всего не понимает именно -1 в значениях

так я для проверки вызываю функцию sched_get_priority_max()

int policy= SCHED_OTHER;
param.sched_priority = sched_get_priority_max(policy);

эта функция возвращает ноль, как впрочем и функция sched_get_priority_min()


"Pthreads. Задание приоритета потоку"
Отправлено Ganduras , 07-Окт-06 13:08 
>так я для проверки вызываю функцию sched_get_priority_max()
>
>int policy= SCHED_OTHER;
>param.sched_priority = sched_get_priority_max(policy);
>
>эта функция возвращает ноль, как впрочем и функция sched_get_priority_min()

некоторые системы или библиотеки потоков не поддерживают приоритизацию потоков. То, что эти фунции возвращают одинаковое значение, равное нулю, говорит в пользу этого. Возможно это указано в документации. Можно также посмотреть в исходниках ядра (поиск: grep -r или -R pthread_setschedparam <путь к иходникам ядра>).

Возможно проблема устранится с обновлением ядра на более свежее из 2.6.x.