【发布时间】:2017-04-21 03:17:05
【问题描述】:
我参与了一项侦听网络服务的任务。它将通过推送服务发送一个 xml 数据。数据必须经过一些计算,然后我们才会显示出来。
我计划使用队列来存储服务监听器的数据,并通过业务逻辑代码读取数据。是纯单生产者单消费者队列。
由于我必须以 Web 服务推送的形式接收数据,因此我必须始终打开以接收数据并将其推送到队列中。我想过使用boost_lockfree_spsc_queue。因为,如果它是一个可锁定队列,则监听器必须等待一段时间才能获得锁,而 boost_lockfree_spsc_queue 不需要任何锁。
我要存储的数据是
struct MemoryStruct {
char *memory;
size_t size;
};
而队列是
boost::lockfree::spsc_queue<MemoryStruct*> lockFreeQ{100};
在这里阅读性能部分后,我有点困惑。
将此 boost_lockfree_spcc_queue 用于生产目的是否安全。还是应该使用带锁的标准队列(C++ 11)?
谢谢
【问题讨论】:
-
是的,它可以安全地用于生产用途 - 只要您遵守使用要求。哪个部分让你感到困惑?
-
您使用
MemoryStruct但担心boost会搞砸您的程序? -
使用 MemoryStruct 有什么问题吗?
-
stackoverflow.com/users/85371/sehe(http://www.boost.org/doc/… ) 在讨论非阻塞数据结构的性能时,必须区分摊销成本和最坏情况成本。 'lock-free' 和 'wait-free' 的定义只提到了操作的上限。因此,无锁数据结构不一定是每个用例的最佳选择。为了最大化应用程序的吞吐量,应该考虑高性能并发数据结构
标签: multithreading c++11 boost producer-consumer lock-free