New*_*oid 4 c++ tbb concurrenthashmap
我目前正在使用tbb的并发哈希映射来执行并发插入哈希映射.每个键都是一个字符串,值是整数的向量.我想实现以下内容:在插入期间,如果密钥不存在,我插入它并将值添加到其向量.如果存在,我只需将值添加到其向量中.
在检查tbb并发哈希映射API之后,我注意到find和insert函数都只返回布尔值.那么如果它存在,如何返回指向键的指针呢?
有些方法需要在他们的参数中使用访问器.访问器基本上是一个指针,与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)
| 归档时间: |
|
| 查看次数: |
5456 次 |
| 最近记录: |