Posix нить общения Linux - PullRequest
       0

Posix нить общения Linux

0 голосов
/ 11 октября 2010

У меня есть рабочий поток, который работает с самого начала программы и последовательно переносит объект из очереди для обработки. Мне интересно, как лучше заблокировать поток? Объект будет помещен в очередь примерно на величину каждые десятки микросекунд (от 10 до 100 микросекунд). Должен ли я установить поток в спящий режим с постоянным периодом или я должен выработать какой-нибудь механизм сигнализации между потоками? Я хотел бы сосредоточиться в основном на проблеме производительности. Есть идеи?

Спасибо.

Ответы [ 3 ]

1 голос
/ 11 октября 2010

С другой стороны, вы можете использовать условные переменные , если это общая особенность pthreads.Переменные условия предназначены для мьютексов pthread, поэтому они являются очень эффективными примитивами синхронизации (в зависимости от конкретной платформы, конечно).

Follow им .

1 голос
/ 11 октября 2010

Очереди сообщений Posix выглядит хорошим кандидатом, если ваши данные не слишком велики. Вы также можете использовать семафор POSIX :

Поток производителя помещает данные в очередь и делает sem_post
Поток потребителя ожидает с помощью sem_wait и удаляет данные из очереди.

Использовать IMO проще, чем переменную условия. Конечно, вам нужно защитить свою очередь. В зависимости от размера объекта он может быть более подходящим, чем очереди сообщений, но вам нужно реализовать собственную очередь.

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

0 голосов
/ 11 октября 2010

Используйте очереди сообщений POSIX в режиме блокировки (mq_open и т. Д.), Который действительно прост, и посмотрите, соответствуют ли они вашим требованиям к производительности. Если нет, задайте другой вопрос:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...