Всем привет. Пишу вот мультипоточную прогу и столкнулся с небольшой проблемой,
а именно: не получается изменить приоритет потоку.
изменяю приоритет слудующим образом:.......
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.
Вопрос, возможно ли вообще изменить приоритет потоку? И если да, то как?
>rc = pthread_create(&thread,NULL,thread_func,NULL);
>.....
>param.sched_priority = -1;
>rc = pthread_setschedparam(thread,policy,param);
>// тут rc == EINVAL, а это значит, что или неверное policy
>
>//или значение priority для этого policy задано неверноскорее всего не понимает именно -1 в значениях
>>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()
>так я для проверки вызываю функцию 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.