C++ 在多个应用程序中使用boost::进程间::消息队列安全吗?

C++ 在多个应用程序中使用boost::进程间::消息队列安全吗?,c++,boost,interprocess,C++,Boost,Interprocess,我们正在替换消息队列的内部实现(由于总体设计的限制),我想使用boost::interprocess::message_queue作为替代品 但是,我们有一个特定的要求,即在消息队列“已满”(消费应用程序断开连接或落后)的情况下,丢弃“最旧”的消息 我们可以像这样轻松地完成这一任务: do { if(sent = message_queue.try_send(...)) { break; } else { message_queue.rece

我们正在替换消息队列的内部实现(由于总体设计的限制),我想使用
boost::interprocess::message_queue
作为替代品

但是,我们有一个特定的要求,即在消息队列“已满”(消费应用程序断开连接或落后)的情况下,丢弃“最旧”的消息

我们可以像这样轻松地完成这一任务:

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

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

它是安全的。报告的相关部分是:

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

您还可以查看实现,它完全位于头
boost/interprocess/ipc/message\u queue.hpp
,特别是私有成员函数
do\u receive()
。如果忽略所有共享内存机制,它只是一个循环缓冲区(从Boost 1.52开始),由互斥保护