2014-03-24 51 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