系统V – LIFO方式

我正在使用System V来pipe理消息队列。 我成功地做了一个工作原型,一切都按预期工作,但我想有一个LIFO队列,而不是FIFO(预计最后msgsnd消息发送是第一次读取msgget )。

这可能吗 ?

是的,如果你管理正确的消息类型。 msgrcv手册指定:

参数msgtyp指定所请求消息的类型,如下所示:

  • 如果msgtyp为0,则接收队列中的第一条消息。

  • 如果msgtyp大于0,则接收到类型为msgtyp的第一条消息。

  • 如果msgtyp小于0,则接收到最小类型的第一个小于或等于msgtyp的绝对值的消息。

然后,如果您发送的邮件严格减少了msgtyp ,那么msgtyp等于LONG_MIN的提取将始终为您提供上次发送的邮件。 msgtyp在这种情况下扮演着重要角色,1是最大的。

我认为这是不可能的。

术语“队列”是指FIFO。 查看wikipedia:

队列(抽象数据类型)

在计算机科学中,队列(/kjuː/ KYEW)是一种抽象数据类型或集合,其中集合中的实体保持有序,并且集合上的主要(或唯一)操作是添加实体后端位置,被称为入队(enqueue),以及从前端位置移除实体,称为出队(dequeue)。 这使队列成为先进先出(FIFO)数据结构。