繁体   English   中英

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

[英]Is it safe to consume a boost::interprocess::message_queue multiple applications?

由于整个设计的局限性,我们正在替换消息队列的内部实现,并且我想使用boost::interprocess::message_queue作为几乎替代的替换。

但是,我们有一个特殊的要求,即在消息队列为“已满”(使用方的应用程序已断开连接或处于滞后状态)的情况下,必须丢弃“最旧的”消息。

我们可以像这样轻松实现:

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

但是,我在文档中找不到引用来指出这是安全的。 显然,这不是消息队列的传统用法(从多个应用程序中使用它),但是可以保证它正常工作吗?

它是安全的。 文档的相关部分是:

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

您还可以查看实现,它完全在标题boost/interprocess/ipc/message_queue.hpp ,尤其是私有成员函数do_receive() 如果您忽略所有共享内存机制,那么它只是一个由互斥锁保护的循环缓冲区(从Boost 1.52开始)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM