2014-04-06 6 views
2

필자는 반복자를 사용하고 각 (키, 값) 쌍을 검사하면서 전체 tbb 동시 해시 맵을 탐색 중입니다.Tbb 동시 해시 맵 반복자

for (MAP::pair = myHashTable.begin(); myHashTable.end(); pair++) 

이 반복기는 어떻게 병렬 처리 할 수 ​​있습니까? Reference Manual에 설명되어

+0

실례합니다. 질문에 답변 했습니까? :) – Anton

+0

잘 다음에 나는 stackoverflow를 우회하고, 갈 사람을 알아! :) – NewToAndroid

답변

4

사용 range() 방법 :

HashTable_t myHashTable; // assuming HashTable_t is concurrent_hash_map specialization 
tbb::parallel_for(myHashTable.range(), [](const HashTable_t::range_type &r) { 
    for(HashTable_t::iterator i = r.begin(); i != r.end(); i++); 
}); 

(나는 간결을 위해 사용하지만 의 이익을 위해 명시 적으로 유형을 보여)

그리고 거기에주의 노트에주의하시기 바랍니다 :

테이블을 반복하는 동안 count 및 find를 포함하여 동시 작업을 호출하지 마십시오. 동시 탐색 및 삽입이 필요한 경우에는 concurrent_unordered_map을 사용하십시오.

+0

예제를 추가해 주실 수 있습니까? 그래서 예. 당신은() 연산자를 구현하지만 무엇을 작성해야합니까? void operator() (const tbb :: blocked_range :: iterator> range) const { –

+0

감사합니다, 대답을 개선했습니다 – Anton

+0

감사합니다! HashTable_t :: range_type을 작성하지 않았습니다. –