gpt4 book ai didi

c++ - boost::lockfree::spsc_queue、boost::lockfree::queue、串行队列操作之间的比较

转载 作者:太空宇宙 更新时间:2023-11-04 13:35:42 24 4
gpt4 key购买 nike

我比较了这三种情况使用的运行时间,它们是boost::lockfree::queue, boost::lockfree::spsc_queue 以及使用std::queue的生产者/消费者队列的串行代码。我在“/apps/boost_1_56_0/libs/lockfree/examples”中编译并运行了“spsc_queue.cpp”、“queue.cpp”的boost示例代码,下面是生成/消耗相同数量对象的串行代码。

boost::lockfree::queue 生产/消费 400000000 个对象所花费的时间是 290 秒,boost::lockfree::spsc_queue(现在等待单生产者队列和单消费者队列)是 172.84 秒。没有多线程的代码只有17.35秒。我想知道使用多线程无锁队列有什么意义。这两个无锁队列可以并发访问只是一个演示吗?

#include <queue>
#include <iostream>


int producer_count = 0;
int consumer_count = 0;

std::queue<int> q;

const int iterations = 400000000;

void producer(void)
{
for (int i = 0; i != iterations; ++i) {
int value = ++producer_count;
q.push(value);
}
}

void consumer(void)
{
int value;

while (!q.empty()) {
value = q.front();
q.pop();
++consumer_count;
}
}

int main(int argc, char* argv[])
{
using namespace std;

producer();
consumer();

cout << "produced " << producer_count << " objects." << endl;
cout << "consumed " << consumer_count << " objects." << endl;
}

最佳答案

是的,你是对的!

无锁队列可以在多线程环境中并发访问,而不会产生任何数据竞争。

  • boost::lockfree::spsc_queue:单一生产单一消费者队列
  • boost::lockfree::queue: 多生产者多消费者队列

http://www.boost.org/doc/libs/1_59_0/doc/html/lockfree.html

关于c++ - boost::lockfree::spsc_queue、boost::lockfree::queue、串行队列操作之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com