Как заглянуть в очередь сообщений Linux (POSIX), не удаляя элемент? - PullRequest
14 голосов
/ 13 сентября 2011

Мне нужно заглянуть в очередь сообщений, не удаляя их.Я продолжу удаление элемента очереди сообщений, только если он соответствует определенным критериям.Как это сделать?Ниже приведены API, которые я знаю, но ни один из них не поддерживает поддержку.

  • mq_close() - закрыть очередь сообщений

  • mq_getattr() - получитьтекущие атрибуты очереди сообщений

  • mq_notify() - уведомить вызывающий процесс, когда очередь становится непустой

  • mq_open() - открыть илисоздать очередь сообщений

  • mq_receive() - получить сообщение из очереди

  • mq_send() - поместить сообщение в очередь сообщений

  • mq_setattr() - установить флаги для очереди сообщений

  • mq_unlink() - отсоединить (т.е. удалить) очередь сообщений

Есть ли способ просмотреть сообщение, не удаляя его?

1 Ответ

6 голосов
/ 14 сентября 2011

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

Короткий ответ: просмотр маловероятен, потому что для стабильной его реализации потребуется явная семантика блокировки.

...