как увеличить приоритет дочернего pthread относительно родительского потока - PullRequest
4 голосов
/ 10 ноября 2009

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

Я попытался установить приоритет созданного потока следующим образом:

struct sched_param param;
pthread_attr_t tattr;
pthread_attr_init(&tattr);
pthread_attr_getschedparam(&tattr, &param);
param.sched_priority = sched_get_priority_max(SCHED_RR);
pthread_attr_setschedparam(&tattr, &param);
pthread_create(&helper_thread, &tattr, helper_main, NULL);

Но вызов pthread_attr_setschedparam возвращает EINVAL.

Я не уверен, что я делаю здесь не так. Правильный ли это общий подход?

Мне все равно, как это делается, мне просто нужно, чтобы новый поток имел более высокий приоритет, чем оригинальный.

1 Ответ

4 голосов
/ 10 ноября 2009

Установка приоритета в соответствии с политикой планирования по умолчанию (SCHED_OTHER) недопустима. Вам нужно переключиться на политику SCHED_RR, если вы хотите использовать приоритет SCHED_RR:

pthread_attr_setschedpolicy(&tattr, SCHED_RR);

Вам также не следует устанавливать для него максимальный приоритет - если вы просто хотите, чтобы он имел более высокий приоритет, чем основной поток, тогда приоритета 1 будет достаточно. (В любом случае, вы можете обнаружить, что установка максимального приоритета не удалась с EPERM, если вы не root).

...