C приоритет потока pthread linux
моя программа имеет один фоновый поток, который заполняет и меняет местами задний буфер реализации двойного буфера. Основной поток использует передний буфер для отправки данных. Проблема в том, что основной поток получает больше времени обработки в среднем при запуске программы. Я хочу противоположное поведение, так как заполнение заднего буфера является более трудоемким процессом, чем обработка и отправка данных клиенту.
Как я могу достичь этого с помощью C POSIX pthreads в Linux?
4 ответов
по моему опыту, если в отсутствие приоритизации ваш основной поток получает больше CPU, то это означает одну из двух вещей:
на самом деле требуется дополнительное время, вопреки вашим ожиданиям, или
фоновый поток голодает, возможно, из-за блокировки 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).