我正在努力避免过度填充邮件队列,所以这里几乎没有问题
使用 mq_attr
时答案 0 :(得分:1)
(1)mq_curmsgs == mq_maxmsg已满
(2)仅当您想继续写信时。如果你从未读过它,将东西放入队列的重点是什么?如果你问是否可以在运行中扩展队列而不是阅读它,那么不。队列限制在创建时指定。
(3)取决于你在做什么。您阅读队列的替代方案基本上归结为:
mq_receive
默认会屏蔽。mq_open
将队列打开为非阻止,或使用mq_setattr
将队列更改为非阻止。它为您提供了基本的轮询功能,以查看当前是否有要阅读的内容。mq_notify
。这允许您指定(a)信号或(b)在空队列获取新消息时生成线程。mq_timedreceive
。如果队列处于阻塞模式,则只会阻塞您指定的时间长度。select
等,因为mqd_t类型是文件描述符。其他POSIX系统可能不是这样。 select
和兄弟为您提供了将您的队列与其他I / O事件进行多路复用的功能,并被告知何时队列中有什么东西需要读取。