我正在设计一个单进程多线程嵌入式Linux应用程序。该设计包括客户端-服务器子系统,其中工作线程接收其他线程在POSIX消息队列上发布的消息。
我需要队列表现出非阻塞发送和阻塞接收语义。我可以想到几种实现以上目标的方法: - 为了访问队列而创建两个分离的消息队列描述,即调用mq_open两次。接下来,将用于通过队列发送的描述设置O_NONBLOCK标志。
我需要队列表现出非阻塞发送和阻塞接收语义。我可以想到几种实现以上目标的方法: - 为了访问队列而创建两个分离的消息队列描述,即调用mq_open两次。接下来,将用于通过队列发送的描述设置O_NONBLOCK标志。
指定阻塞行为并使用mq_timedsend代替mq_send
指定阻塞行为并在mq_send之前调用mq_getattr以避免发送时阻塞
POSIX似乎提供了这样的保证(https://pubs.opengroup.org/onlinepubs/009695399/functions/mq_open.html),但Linux文档并没有明确说明每次调用mq_open都会创建一个新的消息队列描述对象。
Linux有这样的保证吗?
谢谢。
socketpair()
创建一个匿名的双向套接字对来使用。或者只需使用无锁队列数据结构。 - Shawninproc
传输方式意味着它避免了在内核中复制数据,因此可能比Posix消息队列更快。它还具有所有可能需要的语义/传输/模式。 - bazza