C приоритет потока pthread linux

моя программа имеет один фоновый поток, который заполняет и меняет местами задний буфер реализации двойного буфера. Основной поток использует передний буфер для отправки данных. Проблема в том, что основной поток получает больше времени обработки в среднем при запуске программы. Я хочу противоположное поведение, так как заполнение заднего буфера является более трудоемким процессом, чем обработка и отправка данных клиенту.

Как я могу достичь этого с помощью C POSIX pthreads в Linux?

4 ответов


по моему опыту, если в отсутствие приоритизации ваш основной поток получает больше CPU, то это означает одну из двух вещей:

  1. на самом деле требуется дополнительное время, вопреки вашим ожиданиям, или

  2. фоновый поток голодает, возможно, из-за блокировки contention

изменение приоритетов не исправит ни один из них.


посмотрите на pthread_setschedparam() --> http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_setschedparam.3.html

pthread_setschedparam(pthread_t thread, int policy,
                         const struct sched_param *param);

вы можете установить приоритет в поле sched_priority sched_param.


использовать pthread_setschedprio(pthread_t thread, int priority). Но, как и в других случаях (setschedparam или при использовании pthread_attr_t), ваш процесс должен быть запущен под root, если вы хотите изменить приоритеты (например, nice utility).


вы должны взглянуть на pthread_attr_t структура. Он передается как параметр в