2014-03-24 62 views
0

我對C++非常陌生,我一直在爲尋找tbb併發散列映射的初學者教程而徒勞無功。我一直在我的C​​ ++程序中使用boost無序哈希映射,現在我想使用tbb的併發哈希映射,因爲多個線程將一次寫入哈希映射。從boost無序轉換爲tbb併發散列映射

我做的升壓轉換器的哈希表以下四種操作:在MYMAP

string key = "somestring" 
int somevalue = 1 
myMap[key].push_back(somevalue); 
  • 迭代通過所有的鍵:

    typedef boost::unordered_map<string, std::vector<int> > MAP; 
    MAP myMap; 
    
    1. 插入到MYMAP

      BOOST_FOREACH(MAP::value_type pair, myMap) 
      { 
           string key = pair.first; 
      } 
      
    2. 返回與鍵相關聯的值:

      MAP::const_iterator iter = myMap.find("somekey"); 
      

    我怎樣才能達到1,2和3,使用TBB併發哈希映射?請注意,我執行2和3只所有線程與他們的鑲

  • 回答

    1

    完成後你應該能夠簡單地你的typedef更改爲typedef tbb::concurrent_unordered_map<string, std::vector<int> > MAP;,安全地使用多線程的容器。

    插入,迭代器(begin .. end)和find方法都以相同的方式工作,但與unordered_map不同,它們是線程安全的。

    +1

    ..因爲它不是線程安全的tbb :: concurrent_unordered_map – Anton

    +0

    需要不需要併發擦除()如果是這種情況,那麼爲什麼tbb具有用於插入和查找的acessor和const accessor? – NewToAndroid

    +1

    @NewToAndroid,請不要將concurrent_hash_map(使用'erase()'和訪問器)與concurrent_unordered_map(使用'unsafe_erase()'和迭代器而不是訪問器) – Anton