首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有锁队列与无锁队列

有锁队列与无锁队列
EN

Stack Overflow用户
提问于 2016-12-06 21:04:38
回答 1查看 2.1K关注 0票数 0

我参与了一项侦听web服务的任务。它将通过推送服务发送xml数据。数据必须经过一些计算,然后我们才能显示出来。

我计划通过服务监听器使用queue来存储数据,通过业务逻辑代码来读取数据。它是一个纯粹的单生产者单消费者队列。

由于我必须以web服务推送的形式接收数据,因此我必须始终打开以接收数据并将其推送到队列。我想过使用boost_lockfree_spsc_queue。因为,如果它是一个可锁队列,侦听器必须等待一段时间才能获得锁,而boost_lockfree_spsc_queue不需要任何锁。

我要存储的数据是

代码语言:javascript
运行
复制
struct MemoryStruct {
    char *memory;
    size_t size;
};

队列是

代码语言:javascript
运行
复制
boost::lockfree::spsc_queue<MemoryStruct*> lockFreeQ{100};

在阅读了这里的性能部分后,我有点困惑。

将此boost_lockfree_spcc_queue用于生产目的安全吗?或者我应该使用带锁的标准队列(C++ 11 )?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-12-06 21:54:58

是。如果你期望负载不会使你的CPU饱和,你只会增加电费。通常的方法是指数退避。²

如果您完全不确定这一点,那么这看起来很像是过早优化,您可以使用锁定队列。

您可以确保您的使用模式可以轻松地在无锁实现中进行交换。创建您自己的阻塞pop()函数,该函数将在无锁实现的情况下包装等待逻辑。

?请参阅http://kukuruku.co/hub/cpp/lock-free-data-structures-the-evolution-of-a-stack

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40996121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档