我需要浏览消息队列而不删除它们。仅当它符合某些条件时,我才会继续删除消息队列项。这个怎么做?以下是我知道的API,但似乎没有一个支持窥视。
mq_close() —关闭消息队列
mq_close()
mq_getattr() —获取消息队列的当前属性
mq_getattr()
mq_notify() —当队列变为非空时通知呼叫进程
mq_notify()
mq_open() —打开或创建消息队列
mq_open()
mq_receive() —从队列接收消息
mq_receive()
mq_send() —将消息放入消息队列
mq_send()
mq_setattr() —设置消息队列的标志
mq_setattr()
mq_unlink() —取消链接(即删除)消息队列
mq_unlink()
有没有一种方法可以窥视一条消息而不删除它?
对于消息队列,偷看可能不是一个好主意,因为正如sehe所指出的那样,存在竞争条件的危险。假设您偷看了一条消息;由于您无法锁定队列,因此您将无法可靠地检索到相同的邮件。如果您有两个进程从同一个队列接收互斥的消息,则应考虑将这些消息分成两个队列,以简化设计并保持竞争条件的稳定性。
答案很简单:偷窥是极不可能的,因为它需要显式的锁定语义才能稳定地执行。