C linux pthread приоритет потока - PullRequest
13 голосов
/ 21 марта 2011

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

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

Ответы [ 4 ]

6 голосов
/ 21 марта 2011

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

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

  2. фоновый поток истощается, возможно, из-за конфликта блокировок

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

3 голосов
/ 21 марта 2011

посмотрите на 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.

1 голос
/ 21 марта 2011

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

1 голос
/ 21 марта 2011

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

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

...