首页 > 解决方案 > 使用 POSIX QUEUE 完成后要做什么

问题描述

我正在使用 mqueue.h 使用 POSIX 消息队列在线程之间进行通信(用于学校项目演示)。

当我使用队列完成我的两个 pthread 并想要关闭消息队列时,我应该怎么做?

  1. 从两个线程执行 mq_unlink 和 mq_close
  2. 从一个线程执行 mq_unlink 和 mq_close
  3. 只从一个线程执行 mq_unlink
  4. 仅从两个线程执行 mq_unlink
  5. 只从一个线程执行 mq_close
  6. 仅从两个线程执行 mq_close

编辑(因为):“关闭。这个问题需要细节或清晰”

我正在使用 mqueue.h (C) 中定义的 POSIX 消息队列在线程之间发送消息。这类似于与消息队列的进程间通信。我可以使用共享内存进行通信,但这不是我想要做的。我已经成功地在线程之间创建、打开、发送和接收消息,但需要知道完成后该怎么做。我找到了 mq_close 和 mq_unlink,但没有找到有关如何使用它们以及从何处使用它们的信息。这就是我要问的。

标签: cmultithreadingmessage-queue

解决方案


mq_overview - POSIX 消息队列的概述。

类似于处理文件。

呼吁mq_close每个mq_open

当一个进程使用完队列时,它使用mq_close(3) 将其关闭,当不再需要队列时,可以使用mq_unlink(3) 将其删除。

mq_unlink可选调用一次。

POSIX 消息队列具有内核持久性:如果没有被mq_unlink(3) 删除,则消息队列将一直存在,直到系统关闭。

mq_unlink()删除指定的消息队列名称。消息队列名称被立即删除。一旦打开队列的任何其他进程关闭引用队列的描述符,队列本身就会被销毁。


推荐阅读