假设您想迭代队列中使用 concurrent_queue<>
实现的所有项目和 std:queue<>
.
从concurrent_queue<>
开始没有迭代器,所以我只能认为我需要做 try_pop()
和 push()
直到您弹出并重新推送 concurrent_queue<>
中的所有项目.
哪个在多线程条件下更有效?,这样做,或者只使用 queue<>
的迭代器并使用关键部分或其他互斥锁锁定它。
我知道只需进行测试和基准测试即可回答我的问题,但我需要知道其中一个应该比另一个更快的原因。
最佳答案
如果您处于多线程环境中并且从队列中压入/弹出以检查它,如果您在弹出和压入操作之间进行上下文切换,其他线程是否会看到不精确的数据?另一个线程可能会推掉另一个对象,所以第一个线程会错过它……等等。
它太复杂了,充满了竞争条件。您必须在进行迭代时锁定队列以保证数据准确性。
此时,问题就变成了:是锁定队列并使用迭代器更快,还是锁定队列并反复弹出/推送更快?我想你可以猜到哪个是更好的选择:-)
关于c++ - 在迭代期间哪个更快的并发队列 <> 与互斥队列 <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805865/