2010-10-11 4 views
0

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

Спасибо.

ответ

0

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

1

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

them.

+0

Это именно то, что означают переменные условия. Пользователь ожидает переменную условия, и когда производитель добавляет в очередь, он сигнализирует переменную условия для пробуждения потребителя. – Jonathan

1

Posix message queues выглядит хорошим кандидатом, если ваши данные не слишком большие. Вы также можете использовать POSIX semaphore:

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

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

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