2011-01-26 1 views
1

concurrent_queue<>std:queue<>을 사용하여 구현 된 대기열의 모든 항목을 반복한다고 가정하십시오.어느 하나 더 빠른 concurrent_queue <> 대 mutex-ed 대기열 <> 동안 반복

concurrent_queue<>에 있기 때문에 더 반복자가 없다, 그래서 난 단지 당신이 에드 팝업 다시 푸시 에드에게 concurrent_queue<>의 모든 항목을 때까지 내가 try_pop()push()을 할 필요가 있다고 생각 할 수 있습니다.

다중 스레드 된 상태에서 더 효율적입니까? 또는이를 수행하거나 queue<>의 반복기를 사용하고 중요한 섹션이나 다른 뮤텍스를 사용하여 잠급니다.

필자는 테스트와 벤치 마크를 통해 내 질문에 대한 답을 얻을 수있을 것이라고 알고 있지만 왜 다른 하나보다 빠른지에 대한 이유를 알아야합니다.

답변

3

멀티 스레드 환경에서 대기열에서/pop을 눌러 확인하면 팝 및 푸시 작업 사이에서 컨텍스트 전환하면 다른 스레드가 부정확 한 데이터를 보지 않습니까? 그리고 다른 스레드가 다른 객체를 밀어 낼 수 있으므로 첫 번째 스레드는 그것을 놓치게됩니다 ...

너무 복잡하고 경쟁 조건이 너무 복잡합니다. 데이터 정확성을 보장하기 위해 반복을 수행 할 때 대기열을 잠 가야합니다.

큐 포인트를 잠그고 반복기를 사용하거나 대기열을 잠그고 반복적으로 팝/푸시하는 것이 더 빠릅니까? 나는 당신이 더 나은 옵션을 여기에서 추측 할 수 있다고 생각합니다 :-)

관련 문제