tbb并发哈希映射查找和插入

New*_*oid 4 c++ tbb concurrenthashmap

我目前正在使用tbb的并发哈希映射来执行并发插入哈希映射.每个键都是一个字符串,值是整数的向量.我想实现以下内容:在插入期间,如果密钥不存在,我插入它并将值添加到其向量.如果存在,我只需将值添加到其向量中.

在检查tbb并发哈希映射API之后,我注意到find和insert函数都只返回布尔值.那么如果它存在,如何返回指向键的指针呢?

Ant*_*ton 5

有些方法需要在他们的参数中使用访问器.访问器基本上是一个指针,与scoped_lock保护对元素的并发访问相结合.如果没有锁,则可以同时修改元素,从而导致数据争用.因此,永远不要直接在concurrent_hash_map中使用指向元素的指针(除非受访问者保护).

此外,您不需要find()任务方法,因为insert()方法创建元素(如果它不存在).

根据参考手册,哈希映射具有以下方法,可能满足您的需求:

bool insert( accessor& result, const Key& key );         // creates new element by default
bool insert( accessor& result, const value_type& value );// creates new element by copying
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

{
    hash_map_t::accessor a;
    hash_map.insert( a, key );       // creates by default if not exists, acquires lock
    a->second.my_vector.push_back( value ); // new or old entry, add to vector anyway
} // the accessor's lock is released here
Run Code Online (Sandbox Code Playgroud)