c++ - 在迭代期间哪个更快的并发队列 <> 与互斥队列 <>

标签 c++ algorithm iterator performance containers

假设您想迭代队列中使用 concurrent_queue<> 实现的所有项目和 std:queue<> .

concurrent_queue<>开始没有迭代器,所以我只能认为我需要做 try_pop()push()直到您弹出并重新推送 concurrent_queue<> 中的所有项目.

哪个在多线程条件下更有效?,这样做,或者只使用 queue<> 的迭代器并使用关键部分或其他互斥锁锁定它。

我知道只需进行测试和基准测试即可回答我的问题,但我需要知道其中一个应该比另一个更快的原因。

最佳答案

如果您处于多线程环境中并且从队列中压入/弹出以检查它,如果您在弹出和压入操作之间进行上下文切换,其他线程是否会看到不精确的数据?另一个线程可能会推掉另一个对象,所以第一个线程会错过它……等等。

它太复杂了,充满了竞争条件。您必须在进行迭代时锁定队列以保证数据准确性。

此时,问题就变成了:是锁定队列并使用迭代器更快,还是锁定队列并反复弹出/推送更快?我想你可以猜到哪个是更好的选择:-)

关于c++ - 在迭代期间哪个更快的并发队列 <> 与互斥队列 <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805865/

相关文章:

c++ - 代码块中未定义的函数引用

c++ - 为什么重写的虚方法不能在没有显式作用域的情况下看到重载的基类版本?

algorithm - 算法导论第三版-习题2.3 -3-nlg(n)的归纳证明

algorithm - 比赛括号放置算法

java.util.ConcurrentModificationException - 如何使用迭代器进行删除

c++ - fuse (用户空间中的文件系统)错误 : expected primary-expression before ‘.’ token

c++ - 数组大小错误 x64 进程

连续函数最大值的算法

java - 将 for-each 循环与返回迭代器的函数结合使用

c++ - 为什么 std::iterator 没有定义 const_reference 和 const_pointer?