Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哪一个并发队列更快<&燃气轮机;vs mutex-ed队列<&燃气轮机;迭代期间_C++_Algorithm_Iterator_Performance_Containers - Fatal编程技术网

C++ 哪一个并发队列更快<&燃气轮机;vs mutex-ed队列<&燃气轮机;迭代期间

C++ 哪一个并发队列更快<&燃气轮机;vs mutex-ed队列<&燃气轮机;迭代期间,c++,algorithm,iterator,performance,containers,C++,Algorithm,Iterator,Performance,Containers,假设您希望迭代使用并发_queue和std:queue实现的队列中的所有项 由于在concurrent\u队列上没有迭代器,所以我只能认为我需要执行try\u pop()和push(),直到您弹出并重新推送concurrent\u队列中的所有项目 在多线程条件下,哪一个更有效?这样做,或者只使用队列的迭代器并使用critical section或其他互斥锁将其锁定 我知道just do test and benchmark可以回答我的问题,但我需要知道为什么一个线程比另一个更快。如果您在多线程环

假设您希望迭代使用
并发_queue
std:queue
实现的队列中的所有项

由于在
concurrent\u队列上
没有迭代器,所以我只能认为我需要执行
try\u pop()
push()
,直到您弹出并重新推送
concurrent\u队列中的所有项目

在多线程条件下,哪一个更有效?这样做,或者只使用
队列的迭代器
并使用critical section或其他互斥锁将其锁定


我知道just do test and benchmark可以回答我的问题,但我需要知道为什么一个线程比另一个更快。

如果您在多线程环境中,从队列中推送/pop来检查它,如果您在pop和推送操作之间切换上下文,其他线程不会看到不精确的数据吗?另一个线程可能会将另一个对象推离,因此第一个线程可能会错过它。。。等等

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

在这一点上,问题变成了:是锁定队列并使用迭代器更快,还是锁定队列并重复弹出/推送更快?我想你可以猜出哪一个是更好的选择:-)