2014-12-19 2 views
3

모두lockfree 큐의 크기를 관찰하십시오.

부스트 라이브러리의 잠금없는 큐 데이터 구조를 사용하려고합니다.

#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

동시 데이터 구조에는 * 크기가 없습니다. 그것에 대해 생각해보십시오. 그렇지 않으면 모든 동시 데이터 구조의 크기가 17 인 것으로 간주하십시오. –

+0

@KerrekSB 전체 정확도로 알 수있는 크기가 아니라 크기가 있습니다. –

+1

@MichaelGazonda 그리고 그 크기는 꽤 쓸모없는 개념입니다. – juanchopanza

답변

4

최고/최저 수위를 추적하려는 경우 엔큐를 추가 할 때 증가하는 원자 카운터를 가져오고, 대기열에서 꺼낼 때 감소시킵니다.

주기적으로 카운터를 샘플링하여 필요한 튜닝/통계 분석을 수행 할 수 있습니다.

대기열 자체는 필요한 작업에 대해서만 비용을 지불하기 때문에이 작업을 제공하지 않습니다.

+0

그리고 확실히, 별도로 보관 된 카운터가 의미있는 숫자를 표시한다는 보장은 없습니다. 대기열에 대기열과 대기열 사이에 큰 일시 중지가 있고 대기열에 들어갈 때 대기열과 대기열 사이에 대기열이 없으면 음수 크기를 가질 수도 있습니다. 모두 근사하고 최선의 노력입니다. 이 시점에서 두 개의 별도 카운터를 유지하는 것이 더 좋을 수 있습니다. 하나는 "생산 된 작업"을위한 것이고 다른 하나는 "작업 한 작업"을위한 것입니다. –

+0

@KerrekSB 샘플 편향 및 측정 오류를 고려하는 한 통계가 의미있는 방식으로 의미가 있습니다. 그렇더라도, 이것으로부터 평활화/수정 된 정보를 유도 할 때 더 유용 할 것입니다. 기술적으로, 당신은 물론 자리에있어 – sehe

+0

내 편집을 참조하십시오; 통계를 보려면 특정 컨테이너 크기가 아니라 "유지 능력"을 측정해야합니다. 예, 통계는 매우 중요합니다. –

관련 문제