Что делать, когда сделано с помощью POSIX QUEUE - PullRequest
0 голосов
/ 03 февраля 2020

Я использую mqueue.h, чтобы использовать очередь сообщений POSIX для связи между потоками (для демонстрации школьного проекта).

Когда я закончу с двумя своими потоками, используя очередь, и хочу закрыть очередь сообщений, что мне делать?

  1. Делать mq_unlink и mq_close из обоих потоков
  2. Делать mq_unlink и mq_close из одного потока
  3. Делать mq_unlink только из одного потока
  4. Сделать mq_unlink только из двух потоков
  5. Сделать mq_close только из одного потока
  6. Сделать mq_close только из двух потоков

Редактировать (из-за): "Закрыто. Этот вопрос требует подробностей или ясности "

Я использую очередь сообщений POSIX, определенную в mqueue.h (C), для отправки сообщений между потоками. Это похоже на межпроцессное взаимодействие с очередью сообщений. Я мог общаться, используя общую память, но это не то, что я хочу делать. Я успешно создал, открыл, отправил и получил сообщения между потоками, но мне нужно знать, что делать после этого. Я нашел mq_close и mq_unlink, но не нашел информации о том, как их использовать и откуда. Об этом я и спрашиваю.

1 Ответ

1 голос
/ 03 февраля 2020

mq_overview - обзор очередей сообщений POSIX.

Аналогично работе с файлами.

Вызов mq_close для каждого mq_open.

Когда процесс завершает использование очереди, он закрывает ее с помощью mq_close (3), а когда очередь больше не требуется, его можно удалить с помощью mq_unlink (3).

Опционально один раз mq_unlink.

Очереди сообщений POSIX имеют постоянство в ядре: если не удалить с помощью mq_unlink (3), очередь сообщений будет существовать до тех пор, пока система не будет закрыта.

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

...