Я разрабатываю однопроцессное многопоточное встроенное приложение Linux. Конструкция включает в себя подсистему клиент-сервер, в которой рабочий поток получает сообщения, отправленные другими потоками в очереди сообщений POSIX.
Мне нужна очередь, чтобы демонстрировать неблокирующую семантику отправки и блокирующего приема. Я могу придумать несколько способов для достижения вышеизложенного: - Создание двух отдельных описаний очереди сообщений для доступа к очереди для отправки и получения, при котором дважды вызывается mq_open. За этим последует установка флага O_NONBLOCK описания, которое будет использоваться для отправки через очередь.
Указание поведения блокировки и использование mq_timedsend вместо mq_send
Указание поведения блокировки и вызов mq_getattr перед mq_send, чтобы избежать блокировки при отправке
Первое решение, вероятно, является предпочтительным, однако для его работы необходимо гарантировать, что каждый вызов mq_open создает новый объект описания очереди сообщений (я также предполагаю, что потоки в процессе могут использовать несколько таких объектов для выполнения операций в одной и той же очереди).
Кажется, POSIX предоставляет такую гарантию (https://pubs.opengroup.org/onlinepubs/009695399/functions/mq_open.html) однако в документации Linux прямо не говорится, что каждый вызов mq_open создает новый объект описания очереди сообщений.
Существует ли такая гарантия для Linux?
Спасибо,