Как заставить заблокированный вызов mq_receive отказаться?Linux

Ответить
Anonymous
 Как заставить заблокированный вызов mq_receive отказаться?

Сообщение Anonymous »

Я пытаюсь обновить библиотеку сообщений с очередей сообщений SYSV до очередей сообщений POSIX. В отличие от очередей SYSV, закрытие и/или удаление очереди сообщений POSIX, заблокированной в mq_receive(), не разблокирует ее, что приведет к зависанию моих программ. Я также попытался установить флаг O_NONBLOCK в атрибутах очереди сообщений, но, похоже, это не дает эффекта, если он установлен, когда она уже заблокирована.
Как я могу принудительно заблокировать mq_receive(), чтобы отказаться и вернуться?
Обратите внимание, что использование mq_timedreceive() или предварительная установка атрибута O_NONBLOCK не является опция. Я обновляю библиотеку, используемую существующими приложениями, которые ожидают разблокировки очереди сообщений в этом сценарии. ОС — Linux. Единственная идея, которая пришла мне в голову на данный момент, — это отправлять пустые сообщения, пока они не разблокируются. Но это кажется немного хаотичным и приводит к новому вопросу: как определить, заблокирована ли в данный момент очередь, чтобы знать, что это нужно сделать?

Подробнее здесь: https://stackoverflow.com/questions/786 ... to-give-up
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»