Подтвердить что ты не робот

C linux pthread thread priority

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

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

4b9b3361

Ответ 1

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

  • на самом деле требуется дополнительное время, в отличие от вашего ожидания, или

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

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

Ответ 3

Вы должны посмотреть на структуру pthread_attr_t. Он передавался как параметр функции pthread_create. Он использовался для изменения атрибутов потока и может помочь вам решить вашу проблему.

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

Ответ 4

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