Intereting Posts
Что произойдет, если я брошу указатель на функцию, изменив количество параметров Программирование базового сокета в C Веб-браузер не интерпретирует изображение, переданное с помощью массива unsigned char Использование исходного указателя после realloc? readdir (), начинающийся с точек вместо файлов Проверка отзыва сертификата OpenSSL в клиентской программе с использованием скобок OCSP Когда используется pthread_spin_lock правильная вещь (например, mutex pthread)? Любые ссылки на анализ динамического кода? Обнаружение интегрального переполнения с помощью scanf Насколько переносима слабая связь? #pragma слабый my_symbol Если я fork (), а затем выполните execv (), которому принадлежит консоль? Как собрать поплавок из двух байтов? Отображать предупреждение с помощью пользовательских названий кнопок в Windows? красть биты из указателя Каковы основные шаги для компиляции?

sched_setscheduler для всех streamов или основного streamа?

У меня есть следующий источник, который хотел бы иметь приоритет SCHED_RR 90:

int main(int argc, char** argv) { const char *sched_policy[] = { "SCHED_OTHER", "SCHED_FIFO", "SCHED_RR", "SCHED_BATCH" }; struct sched_param sp = { .sched_priority = 90 }; pid_t pid = getpid(); printf("pid=(%d)\n",pid); sched_setscheduler(pid, SCHED_RR, &sp); printf("Scheduler Policy is %s.\n", sched_policy[sched_getscheduler(pid)]); pthread_t tid ; pthread_create(&tid , NULL, Thread1 , (void*)(long)3); pthread_create(&tid , NULL, Thread2 , (void*)(long)3); pthread_create(&tid , NULL, Thread3 , (void*)(long)3); while(1) sleep(100); } 

в то время как shell «сверху», я вижу, что процесс имеет PR с -91, похоже, что он работает. Как я знаю, в Linux streamи1 и thread2 и thread3 – это разные задачи из основного streamа, они просто используют одну и ту же виртуальную память, Мне нравится знать в этом тесте, нужно ли мне добавить

 pthread_setschedparam(pthread_self(), SCHED_RR, &sp); 

для всех thread1, thread2 и thread3, так что все эти 3 могут быть запланированы с помощью SCHED_RR?! или мне это не нужно?! и как я могу заметить, что streamи thread1, thread2 и thread3 являются SCHED_RR или SCHED_OTHER?!

Редактировать :

 sudo chrt -v -r 90 ./xxx.exe 

увидим :

 pid 7187's new scheduling policy: SCHED_RR pid 7187's new scheduling priority: 90 

как я могу быть уверен, что это только для основного streamа?! или все streamи в pid 7187 являются политикой SCHED_RR?! и снова, как это наблюдать?!

Вы должны проверить (и установить, если требуется) атрибуты наследования планировщика перед созданием нового streamа.

int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);

int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);

pthread_attr_getinheritsched() будет хранить в переменной, указанной путем inheritsched одного из двух возможных значений:

  • PTHREAD_INHERIT_SCHED – Темы, созданные с помощью attr
    наследовать атрибуты планирования из создающего streamа; атрибуты планирования в attr игнорируются.

  • PTHREAD_EXPLICIT_SCHED – Темы, созданные с помощью attr, принимают свои атрибуты планирования из значений, указанных объектом атрибутов.

Если вы хотите, чтобы каждый вновь созданный stream наследовал атрибуты планировщика вызывающей задачи, вы должны установить PTHREAD_INHERIT_SCHED (если он еще не установлен).

Также обратите внимание:

Значение по умолчанию атрибута inherit-scheduler в новом объекте атрибутов инициализированных streamов – PTHREAD_INHERIT_SCHED

Рекомендации

 $ man pthread_setschedparam $ man pthread_attr_setinheritsched 
  • (Blockquoted материал был скопирован из частей выпуска 3.74 проекта man man-страниц Linux).