Понимание планирования Linux, когда задействованы pthreads

, обсуждая другую проблему, см. Отладка странной ошибки, которая зависит от выбранного планировщика , я столкнулся с некоторыми вопросами о планировании моих потоков. Я использую Linux 2.6.x, работаю с правами root и использую потоки pthread для параллельной работы в критически важном для времени приложении, написанном на C / C ++.

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

В основном я где-то в начале делаю:

struct sched_param sp;
memset(&sp, 0, sizeof(sched_param));
sp.sched_priority = 99;
sched_setscheduler(getpid(), SCHED_RR, &sp);

Я понимаю, что это код, который переключает мою программу на использование RR-Scheduler, работающего на макс. приоритет.

При запуске pthread, я делаю:

sched_param param;
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority = priority;
pthread_attr_setschedpolicy(&attr, SCHED_RR);
pthread_attr_setschedparam(&attr, ¶m);

Я понимаю, что это код, который переключает поток, который будет запущен, на RR-Scheduler, используя приоритет, указанный в 'priority'. Будет ли это работать эквивалентно, если main не переключит планировщик?

Я не понимаю, нужно ли вызывать этот код в main? (Основная функция не делает ничего, кроме запуска всего, а затем блокировки ввода с клавиатуры.) Где я могу найти точную документацию о том, как это работает. Я не думаю, что справочные страницы хорошо справляются с объяснением предыстории.

Заранее спасибо.

6
задан Community 23 May 2017 в 12:00
поделиться