我需要知道是否已经输入了IPC队列中的消息。 在实践中,我需要知道当一个msgrvc函数调用时,我得到的第一个消息是否被队列消失,或者所选消息是否是随机的。
现在,我提出这个问题,因为当在代码msgrcv的一部分内部获得一条不是用于该代码的消息时,我通常会重新排队消息e阅读队列中的以下消息。 我想知道的是,例如,他关注的是消息
msgA,msgB,msgC
,存储在队列中 如果阅读 msgA 并取消它,我将获得包含此新订单消息的队列
msgB,msgC,msgA
所以以下对msgrcv的调用会给我msgB 或者如果该顺序是随机的,那么我可以再次阅读msgA
谢谢,恩佐
答案 0 :(得分:2)
消息队列通常作为先出缓冲区中的第一个,但有一些方法可以修改它。
The Linux Programming Interface中有一个很好的例子,见第46.2.2节。
将消息返回到同一队列时,您将始终遇到的问题是,您迟早会遇到它,如果它不适合第一次使用的线程,我假设它会在第二次以及随后的时间也不合适。
您是否考虑使用令牌环类型方法,并设置了多个消息队列?即您的线程接收到第一个队列,如果该消息已被读取但不感兴趣,则将其置于第二个队列以供下一个线程使用;然后这将继续,直到所有线程都读取了逐渐减少的消息集。
答案 1 :(得分:0)
好像你想要从IPC msg队列中选择要读取的内容。 您可以使用msgrcv和msgsnd的消息类型参数而不是重新排队。
答案 2 :(得分:0)
正如其名称所示,IPC消息队列是一个队列,因此重新排队可行。
我怀疑它会比选择类型更快,msgrcv
只需检查队列中每条消息的类型,直到它找到具有该类型的第一条消息。您的代码,删除邮件,检查类型并再次对其进行排队。