C++ 螺纹安全C/C++;为推送优化的队列

C++ 螺纹安全C/C++;为推送优化的队列,c++,c,thread-safety,queue,C++,C,Thread Safety,Queue,我正在寻找一个线程安全的C/C++队列实现,它针对推送操作进行了优化。我不介意pop操作是否阻塞,但我希望永远不要在推动端阻塞 让我解释一下原因。我计划为C#应用程序编写一个分析器,我将有多个线程将消息推送到一个调度程序线程上。我不介意调度器是否很快阻塞,但我希望避免推送端的任何延迟。您可以使用。它位于boost sandbox svn中,计划与boost一起发布1.53或1.54版,具体取决于boost.atomic是否及时发布。 目前boost.lockfree依赖于std::atomic而

我正在寻找一个线程安全的C/C++队列实现,它针对推送操作进行了优化。我不介意pop操作是否阻塞,但我希望永远不要在推动端阻塞

让我解释一下原因。我计划为C#应用程序编写一个分析器,我将有多个线程将消息推送到一个调度程序线程上。我不介意调度器是否很快阻塞,但我希望避免推送端的任何延迟。

您可以使用。它位于boost sandbox svn中,计划与boost一起发布1.53或1.54版,具体取决于boost.atomic是否及时发布。
目前boost.lockfree依赖于std::atomic而不是boost.atomic,因此您需要一个c+11编译器来使用它。

有一个通用的多读取器、多写入器非阻塞队列,尽管它通常存在无锁编程的问题,即它无法释放弹出元素的内存。我可以想象,如果您愿意在出列端添加一个锁,您可能能够克服这一点。如果你只需要一个消费者,那就容易多了。今天晚些时候我会研究这个问题。我可能会受到限制,我的团队使用不支持原子的VS2010,我们正在努力获得VS2012的副本,但这可能暂时不会发生。所以我可能会使用旧版本。谢谢你的评论,我读了更多,那个库看起来很有希望。我发现了这个链接:它有一些非常好的信息。我真的认为我会用这个。我将给每个线程一个专用队列,并让一个线程从队列中拉出,然后将内容刷新到管道中或放入SQL数据库中。对于稍后阅读此内容的任何人,请仔细阅读此评论,1.52中不存在无锁(截至今天的最新版本)。确保你的>=1.53,否则你可能会像我一样浪费几个小时,这是我阅读不够仔细的过错:)