в обсуждении другой проблемы см. Отладка странной ошибки, которая зависит от выбранного планировщика , я столкнулся с некоторыми вопросами о планировании моих потоков. Я работаю в Linux 2.6.x, работаю с правами root и использую pthreads для параллельных действий в приложении, критичном по времени, написанном на C / C ++.
Я попытаюсь дать несколько коротких отрывков, чтобы объяснить мой вопрос:
В основном я где-то в начале делаю:
struct sched_param sp;
memset(&sp, 0, sizeof(sched_param));
sp.sched_priority = 99;
sched_setscheduler(getpid(), SCHED_RR, &sp);
Я понимаю, что это код, который переключает мою программу на использование RR-планировщика, работающего на макс. приоритет.
При запуске 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-планировщик, используя приоритет, заданный в 'priority'.
Будет ли это работать аналогично, если main не переключит планировщик?
Чего я не понимаю, так это того, нужно ли вызывать этот код в main? (Основная функция ничего не делает, кроме как запустить все, а затем заблокировать ввод с клавиатуры.)
Где я могу найти точную документацию о том, как это работает. Я не думаю, что man-страницы хорошо объясняют фон.
Заранее спасибо.