C linux pthread thread priority
Моя программа имеет один фоновый поток, который заполняет и заменяет задний буфер двойной реализации буфера.
Основной поток использует передний буфер для отправки данных. Проблема заключается в том, что основной поток получает больше времени обработки в среднем при запуске программы. Я хочу противоположного поведения, поскольку заполнение обратного буфера - это более трудоемкий процесс, а затем обработка и отправка данных клиенту.
Как я могу достичь этого с помощью P PSPIX pthreads в Linux?
Ответы
Ответ 1
По моему опыту, если в отсутствие приоритетности ваш основной поток получает больше CPU, это означает одну из двух вещей:
-
на самом деле требуется дополнительное время, в отличие от вашего ожидания, или
-
фоновый поток умирает от голода, возможно, из-за конфликта блокировок
Изменение приоритетов не исправит ни одно из них.
Ответ 2
посмотрите на 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.
Ответ 3
Вы должны посмотреть на структуру pthread_attr_t
. Он передавался как параметр функции pthread_create
. Он использовался для изменения атрибутов потока и может помочь вам решить вашу проблему.
Если вы не можете решить проблему, вам придется использовать мьютекс, чтобы ваш основной поток не мог получить доступ к вашему буферу до того, как ваш другой поток меняет его.
Ответ 4
Используйте pthread_setschedprio(pthread_t thread, int priority)
. Но, как и в других случаях (setchedparam или при использовании pthread_attr_t), ваш процесс должен запускаться под root, если вы хотите изменить приоритеты (например, хорошая утилита).