System V Message Queue - прием по времени - PullRequest
2 голосов
/ 06 ноября 2010

Я использую System V Message Queue, которая не имеет функции «таймерного приема», как POSIX MQ.Но теперь мне это нужно (это приурочено получать func.).

Можно спросить: «так почему бы вам не использовать POSIX вместо Sys V?».Потому что в моих тестах SysV MQ был на + - 20% быстрее, чем POSIX MQ.

Теперь вопрос.Как подделать «синхронизированное получение» для Sys V MQ?

Я написал фрагмент кода, который проверяет msgrcv с IPC_NOWAIT в цикле с usleep.Я думаю, что это некрасиво, поэтому мне нужны идеи, чтобы написать красивый =]

Ответы [ 2 ]

0 голосов
/ 03 сентября 2012

В этой статье показано то же, что вы заметили, что вам нужно выполнить цикл: http://linuxgazette.net/issue92/hawk.html

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

0 голосов
/ 04 января 2012

Вы могли бы сделать небольшой код, который сначала разветвляет дочерний процесс, который спит в течение X времени.После пробуждения он посылает отцу сигнал (например, SIGUSR1), который прерывает отца и отменяет сообщение msgrcv.Тогда дочерний процесс умирает.Но вы должны помнить, что вам нужно указать обработчик для этого сигнала, потому что по умолчанию он просто выходит из процесса.

...