一尘不染

如何在不删除项目的情况下窥视Linux(POSIX)消息队列?

linux

我需要浏览消息队列而不删除它们。仅当它符合某些条件时,我才会继续删除消息队列项。这个怎么做?以下是我知道的API,但似乎没有一个支持窥视。

  • mq_close() —关闭消息队列

  • mq_getattr() —获取消息队列的当前属性

  • mq_notify() —当队列变为非空时通知呼叫进程

  • mq_open() —打开或创建消息队列

  • mq_receive() —从队列接收消息

  • mq_send() —将消息放入消息队列

  • mq_setattr() —设置消息队列的标志

  • mq_unlink() —取消链接(即删除)消息队列

有没有一种方法可以窥视一条消息而不删除它?


阅读 307

收藏
2020-06-07

共1个答案

一尘不染

对于消息队列,偷看可能不是一个好主意,因为正如sehe所指出的那样,存在竞争条件的危险。假设您偷看了一条消息;由于您无法锁定队列,因此您将无法可靠地检索到相同的邮件。如果您有两个进程从同一个队列接收互斥的消息,则应考虑将这些消息分成两个队列,以简化设计并保持竞争条件的稳定性。

答案很简单:偷窥是极不可能的,因为它需要显式的锁定语义才能稳定地执行。

2020-06-07