使用boost :: interprocess :: message_queue多个应用程序是否安全?

时间:2014-06-09 16:02:29

标签: c++ boost interprocess

我们正在更换消息队列的内部实现(由于整体设计的限制),并且我希望使用boost::interprocess::message_queue作为近乎替代品。< / p>

但是,我们有一个特定的要求,即在消息队列是&#34; full&#34; (消费应用程序要么断开连接要么落后),那就是最老的&#34;消息被丢弃。

我们可以像这样轻松完成:

do
{
   if(sent = message_queue.try_send(...))
   {
      break;
   }
   else
   {
      message_queue.receive(...);
   }
}
while(true);

但是,我无法在证明这是安全的文件中找到参考。它显然不是传统的消息队列使用(从多个应用程序中使用它),但它是否可以保证工作?

1 个答案:

答案 0 :(得分:2)

安全。 doc的相关部分是:

  

线程可以将消息放入队列中,也可以删除   来自队列的消息。

您还可以查看完整位于标头boost/interprocess/ipc/message_queue.hpp中的实现,特别是私有成员函数do_receive()。如果忽略所有共享内存机制,它只是一个使用互斥锁保护的循环缓冲区(从Boost 1.52开始)。