Boost Message Queue不是基于POSIX消息队列?无法选择(2)?

Joh*_*nck 8 select boost epoll message-queue interprocess

我以为我会使用Boost.Interprocess的Message Queue代替套接字在一个主机内进行通信.但是在深入研究之后,似乎这个库出于某种原因避开了POSIX消息队列工具(我的Linux系统支持),而是在POSIX共享内存之上实现.界面足够相似,你可能不会立即猜测,但似乎是这样.

我的缺点是获得的共享内存shm_open(3)似乎不可用select(2),而不是通过获得的POSIX消息队列mq_open(3).

在这种情况下,Boost的图书馆似乎失败了.有谁知道为什么这应该是?即使POSIX消息队列仅在某些系统上可用,我也希望Boost在可用的情况下使用该设施,并且只在必要时重新实现它.POSIX系统是否存在一些我尚未认识到的陷阱?

jkp*_*jkp 4

前几天我在使用 Boost.Interprocess 的同步类时遇到了类似的情况:即条件类。它以“通用”方式实现,但其实现方式是使用自定义自旋锁,效率非常低(至少在 OS X 上)。出于所有意图和目的,它使同步类毫无用处。

根据我的经验,Interprocess 库还相当不成熟。我将它用于共享内存,它确实工作得很好,但有一些粗糙的边缘,我不得不解决一些“缺失的功能”,例如动态调整共享内存的大小等。

总之,不要指望这个库会成为灵丹妙药。这很好,但目前并不例外。