我目前使用tbb的并发散列映射来执行并发插入散列映射。每个键是一个字符串,一个值是一个整数向量。我想实现以下内容:在插入期间,如果该键不存在,我插入它并将值添加到其向量中。如果存在,我只需将该值添加到其向量中。tbb并发散列映射查找并插入
在检查tbb并发哈希映射API后,我注意到find和insert函数只返回布尔值。那么如何返回指向该键的指针?
我目前使用tbb的并发散列映射来执行并发插入散列映射。每个键是一个字符串,一个值是一个整数向量。我想实现以下内容:在插入期间,如果该键不存在,我插入它并将值添加到其向量中。如果存在,我只需将该值添加到其向量中。tbb并发散列映射查找并插入
在检查tbb并发哈希映射API后,我注意到find和insert函数只返回布尔值。那么如何返回指向该键的指针?
有些方法在他们的论点中需要访问者。访问器基本上是一个指针,与保护对元素的并发访问的scoped_lock
耦合。如果没有锁,可以同时修改一个元素,导致数据竞争。因此,请勿直接使用指向concurrent_hash_map中元素的指针(除非受访问者保护)。
此外,您的任务不需要find()
方法,因为insert()
方法创建元素(如果它不存在)。
按照Reference manual,散列图有以下方法,这将有可能满足您的需求:
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
下面是一个例子:
{
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
我有没有回答你的问题? – Anton
对延迟标记正确答案表示歉意。是的,你做到了。感谢您的支持。我发现tbb社区确实很小! – NewToAndroid
谢谢:)是的,[标签:tbb]社区是相当小,upvotes,问题,意见少数。 – Anton