【发布时间】:2020-03-27 06:57:19
【问题描述】:
当创建消息队列没有 O_NONBLOCK 时,如果队列为空,mq_receive() 会调用 block。当一条新消息被发送到队列时,等待的mq_receive() 调用中的哪个实际上解除了阻塞?
QNX 文档明确提到了 FIFO 顺序:
如果多个
mq_receive()呼叫在单个队列中被阻止,则 当消息到达时,它们按 FIFO 顺序解锁。 https://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/m/mq_receive.html
所有 POSIX IPC 实现都是这种情况吗? Linux 实现是做什么的?手册页相当不具体:
如果队列为空,则默认情况下,
mq_receive()会阻塞,直到 消息可用,或呼叫被信号中断 处理程序。
【问题讨论】:
标签: linux posix ipc message-queue