[英]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.