Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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++ 观察无锁队列的大小_C++_Multithreading_Boost - Fatal编程技术网

C++ 观察无锁队列的大小

C++ 观察无锁队列的大小,c++,multithreading,boost,C++,Multithreading,Boost,全部 我正在尝试使用boost库的无锁队列数据结构 #include <boost/thread/thread.hpp> #include <boost/lockfree/queue.hpp> #包括 #包括 但是,我发现这些数据结构不支持获取它们包含的当前条目数()的方法 我想要的是类似于std::queue::size()的东西 非常感谢您的帮助 如果您只想跟踪高/低水位线,请配备一个原子计数器,当您排队时该计数器递增,当您排队时该计数器递减 您可以定期对该计数器

全部

我正在尝试使用boost库的无锁队列数据结构

#include <boost/thread/thread.hpp>
#include <boost/lockfree/queue.hpp>
#包括
#包括
但是,我发现这些数据结构不支持获取它们包含的当前条目数()的方法

我想要的是类似于std::queue::size()的东西


非常感谢您的帮助

如果您只想跟踪高/低水位线,请配备一个原子计数器,当您排队时该计数器递增,当您排队时该计数器递减

您可以定期对该计数器进行采样,以执行可能需要的任何调优/统计分析


队列本身不提供此操作,因为您只需支付所需的费用。

并发数据结构没有大小限制。想想看。或者,如果这真的让你心烦意乱,只要考虑所有并发数据结构的大小为17。@ MichaelGazonda,这使得它的大小是一个无用的概念。@ JuangopANZA根本没有。仅仅因为容器没有100%准确地报告大小并不意味着它是无用的。有时候,知道一个大概的大小总比什么都不知道要好。@MichaelGazonda:对于报告为“大小”的任何值,您都无能为力。任何价值观都和其他价值观一样好。非常感谢所有精彩的论点。“没有花花公子”这句话现在很有说服力。而且可以肯定的是,没有任何形式的保证可以保证单独保存的计数器显示一个有意义的数字。如果在排队和递增之间有一个很大的停顿,而在出列和递减之间没有停顿,那么您甚至可以有负的大小。这都是近似的和尽最大努力的结果。在这一点上,您最好只保留两个单独的递增计数器,一个用于“生产的工作”,另一个用于“消耗的工作”,并对其进行监控。@KerrekSB这是有意义的,因为统计数据可能是有意义的,只要您将样本偏差和测量误差考虑在内。即使如此,当从中导出平滑/校正的信息时,它可能更有用。从技术上讲,你当然是我的编辑现场;对于统计数据,我会衡量我的“跟上进度的能力”,而不是特定的容器大小。是的,统计数据非常重要。@KerrekSB:先递增,然后排队。首先退出队列,然后递减。原子操作不能重新排序,对吗?那么就没有负数了。@RomanL取决于反内存顺序。但默认情况下,你是对的。当然,这并不能使数字准确。我宁愿有消极的一面,也不愿有不必要的偏见。