我想使用Boost.Interprocess的消息队列代替套接字在一台主机内进行通信。但是经过深入研究,似乎该库由于某种原因避免使用POSIX消息队列设施(我的Linux系统支持),而是在POSIX共享内存上实现。尽管接口相似,您可能不能立即猜到这一点,但似乎确实如此。
对我来说,不利的一面是通过
在这种情况下,Boost的库似乎输了。有人知道为什么吗?即使POSIX消息队列仅适用于某些系统,我也希望Boost在可用的地方使用该设施,并仅在必要时重新实现它。是否存在我尚未认识到的POSIX系统陷阱?
对我来说,不利的一面是通过
shm_open(3)
获得的共享内存似乎无法与select(2)
一起使用,而POSIX消息队列通过mq_open(3)
获得则可以。在这种情况下,Boost的库似乎输了。有人知道为什么吗?即使POSIX消息队列仅适用于某些系统,我也希望Boost在可用的地方使用该设施,并仅在必要时重新实现它。是否存在我尚未认识到的POSIX系统陷阱?
boost::interprocess
对象,您需要有一个线程监视相关对象,并在有数据等待时触发fifo或eventfd。 - bdonlan