This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2652R7:可能的 POSIX 错误

Guru**** 2771055 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1188646/cc2652r7-possible-posix-bug

器件型号:CC2652R7

使用 MQ_...() POSIX API 的客户,可能发现 MQ_close()和 MQ_unlink()需要一个订单序列。

 

从 MQ_unlink()上的手册页:

 

 

似乎如果先取消链接、然后关闭、则队列不会关闭。  似乎他们必须在关闭之前取消链接、这对他们来说似乎是错误的、但这一直在基于 POSIX 的其他系统上工作 、包括 Linux 平台。  能否确认 MQ_Close/MQ_unlink 的实现没有问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lawrence、

    我要求 TI 的 POSIX 专家对此主题发表评论、同时他们提供的任何特定应用代码使用说明或示例都将有所帮助。  据我了解、消息队列的一般用法按 MQ_open、MQ_send/MQ_receive、MQ_close、MQ_unlink 的顺序排列。  它们首先是关闭还是取消链接、与其他平台相比、预期是什么?  请提供具体详细信息、以便我们完全了解行为并提出请求。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Ryan --我要在这里介绍劳伦斯

    客户正在取消链接、然后关闭、这在其他系统(即 Linux)上有效、但不会关闭其设备上的队列。 任何建议都值得赞赏。

    -rt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是软件开发的响应:

    MQ_unlink 实际上会释放消息队列对象、如果您尝试通过 MQ_Close 再次引用该对象、则在递减计数器时将执行无后使用。   因此、绝对不允许使用 MQ_unlink 后跟 MQ_close、但另一种方法可以

    客户是否能够检查消息队列是否已打开、并确保在应用程序代码中的 mq_unlink 之前调用 mq_close?

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    感谢大家的明确回应——我将与他们核实。

    BR、

    -rt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    来自客户的另一个快速查询-他们的问题是在此序列中不会删除队列(关闭然后取消链接)。

    这是他们担心的边缘条件:"您可能需要 Linux 进程,使用 MQ_open 创建带有 O_creat 标志的 MQ,并提供名称。  然后另一个进程打开该队列的文件描述符。   这两个进程现在可以通过队列相互通信。  现在、第一个过程执行关闭和取消链接。  从技术上讲,第二个进程仍打开此队列,并且在第二个进程关闭它的文件描述符之前,不会销毁该队列。"

    是否有办法关闭并销毁队列而不必让第二个进程也关闭队列?

    BR、

    -rt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    销毁队列取决于关闭描述符的第二个进程。  如果这种情况永远不会发生、那么该应用存在什么问题?

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题是不会使用此序列删除队列-客户无法创建新线程,因为现有队列尚未销毁。  

    他们只是担心这种可能发生的竞争状况。  

    BR、

    -rt