提升消息队列

Posted

技术标签:

【中文标题】提升消息队列【英文标题】:Boost message queue 【发布时间】:2011-11-04 12:41:29 【问题描述】:

我有以下与 boost::interprocess::message_queue 相关的问题。

按照预期,我计划在 >= 2 个进程之间共享一个消息队列。显然,其中一个可能会在消息队列中崩溃。结果,它将持有内部锁,使其他进程无法访问队列。如何解决?似乎没有办法解锁使用的内部互斥锁。

【问题讨论】:

【参考方案1】:

我们可以在其他进程中使用谓词等待的方法(根据要求1分钟或更长),如果满足则由第二个进程强制解锁队列,然后再次锁定推送和读取后解锁?

更多详情请参阅以下参考文献。

http://en.cppreference.com/w/cpp/thread/condition_variable/wait

编辑:

我们无法解锁内部锁,我以为您手动锁定了队列 使用

scoped_lock 锁(互斥锁);

所以你可以在时间结束时使用 predicate_wait 解锁然后解锁它。 来自其他进程。

【讨论】:

嗨阿里,我们如何“通过第二个进程强制解锁队列”? 您好,强制是指条件满足后手动解锁队列。 请指定使用哪种方法“手动解锁队列”boost.org/doc/libs/1_55_0/doc/html/boost/interprocess/… 抱歉,请查看我的编辑,但您可以使用自己的锁来避免这种情况。 问题是message_queue是内部同步的。我认为我不能以线程不安全的方式访问并将其与我自己的锁“外部”同步。在获取内部锁时,我的其他线程总是有可能崩溃。

以上是关于提升消息队列的主要内容,如果未能解决你的问题,请参考以下文章

提升--20---Disruptor-----号称最快的消息队列

随笔——消息队列线程池模型如何保证重启时消息不丢

中间件消息队列

消息队列面试解析系列- 数据压缩

消息队列:RabbitMQ

聊聊:消息队列