从boost无序到tbb并发哈希映射的转换

Converting from boost unordered to tbb concurrent hash map

本文关键字:哈希 映射 转换 并发 tbb boost 无序      更新时间:2023-10-16

我是c++的新手,我一直在寻找关于并行哈希映射的初学者教程,但徒然。我一直在我的c++程序中使用boost无序哈希映射,现在我想使用tbb的并发哈希映射,因为多个线程将同时写入哈希映射。

我在boost的哈希映射上做了以下四个操作:

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

    string key = "somestring"
    int somevalue = 1 
    myMap[key].push_back(somevalue);
    
  2. 遍历myMap中的所有键:

    BOOST_FOREACH(MAP::value_type pair, myMap)
    {
            string key  = pair.first;
    }
    
  3. 返回与键相关的值:

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

如何使用tbb并发哈希映射实现1、2和3 ?注意,在之后,我只执行了2和3 ,所有线程都完成了它们的insert

您应该能够简单地将类型定义更改为typedef tbb::concurrent_unordered_map<string, std::vector<int> > MAP;,并安全地使用多线程容器。

插入、迭代器(begin ..)End)和find方法都以相同的方式工作,但与unordered_map不同,它们是线程安全的。