2014-12-19 3 views
3

всеСоблюдать размер незанятой очереди

Я пытаюсь использовать структуру данных блокировки свободной блокировки библиотеки ускорения.

#include <boost/thread/thread.hpp> 
#include <boost/lockfree/queue.hpp> 

Однако, я обнаружил, что эти структуры данных не поддерживают методы, чтобы получить число текущих записей, они содержащие (http://www.boost.org/doc/libs/1_53_0/doc/html/boost/lockfree/queue.html).

То, что я хочу, похоже на std :: queue :: size (http://en.cppreference.com/w/cpp/container/queue/size).

Большое спасибо за вашу помощь заранее!

+5

A одновременная структура данных не имеет * есть * a размер. Думаю об этом. Или, если это вас действительно расстраивает, просто подумайте, что все параллельные структуры данных имеют размер 17. –

+0

@KerrekSB Он имеет размер, который не может быть известен с полной точностью. –

+1

@MichaelGazonda И это делает его размер совершенно бесполезным. – juanchopanza

ответ

4

Если вы просто хотите отслеживать метки высокого/низкого уровня воды, у вас есть счетчик атомов, который вы увеличиваете, когда вы ставите в очередь, и уменьшаетесь при удалении.

Вы можете периодически пробовать этот счетчик, чтобы выполнить любой настройку/статистический анализ, который вам может понадобиться.

Сама очередь не выполняет эту операцию, потому что вы платите только за то, что вам нужно.

+0

И, конечно, нет никакой гарантии, что отдельно хранимый счетчик показывает значащее число. Если между интервалом и приращением существует большая пауза, и пауза между декомпрессией и декрементом, вы даже можете иметь отрицательные размеры. Это все приблизительное и лучшее усилие. В этот момент вам может быть лучше просто сохранить только два отдельных, увеличивающих счетчика, один для «произведенной работы» и один для «работы», и следить за ними. –

+0

@KerrekSB Это имеет смысл, так как статистика может быть значимой, если вы принимаете во внимание выборочные смещения и ошибку измерения. Тем не менее, это, вероятно, более полезно при получении сглаженной/исправленной информации из этого. Технически, вы, конечно, на месте – sehe

+0

См. Мое редактирование; для статистики я бы измерил свою «способность идти в ногу», а не конкретный размер контейнера. Да, статистика очень важна. –

Смежные вопросы