8

我想我会使用 Boost.Interprocess 的消息队列代替套接字在一个主机内进行通信。但是在深入研究之后,似乎这个库出于某种原因避开了 POSIX 消息队列工具(我的 Linux 系统支持),而是在 POSIX 共享内存之上实现。界面非常相似,您可能不会马上猜到,但似乎确实如此。

对我来说不利的是,shm_open(3)select(2)通过mq_open(3).

在这种情况下,Boost 的库似乎丢失了。有谁知道为什么会这样?即使 POSIX 消息队列仅在某些系统上可用,我希望 Boost 在可用的地方使用该工具,并仅在必要时重新实现它。POSIX 系统是否存在一些我还不认识的缺陷?

4

2 回答 2

4

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

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

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

于 2009-01-08T12:53:11.203 回答
2

是的,不幸的是它没有。在挖掘资源后意识到这一点时,我也很失望。

但这是这个事实的另一个(好的)方面:如果您的程序使用boost::asio,您可以将 POSIX 消息队列 API 包装为另一个数据报数据源boost::interprocess,如果它是...的一部分,这个(恕我直言)会更好用。这将是非常重要的,但是(恕我直言)绝对值得这样做,所以你可以以统一的方式使用 MQ 并使用其他东西的力量......boost::asio

...在我的下一个项目中,如果我再次需要 POSIX MQ,我肯定会采用这种方式 :)

于 2012-12-03T23:46:49.497 回答