gpt4 book ai didi

c++ - tbb 并发 HashMap 查找和插入

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:02 40 4
gpt4 key购买 nike

我目前正在使用 tbb 的并发 HashMap 来执行并发插入 HashMap 。每个键都是一个字符串,一个值是一个整数 vector 。我想实现以下目标:在插入过程中,如果键不存在,我将其插入并将值添加到其 vector 中。如果它存在,我只需将值添加到它的 vector 中。

检查 tbb 并发 HashMap API 后,我注意到查找和插入函数都只返回 bool 值。那么,如果它存在,我该如何返回指向该键的指针呢?

最佳答案

有些方法在他们的参数中需要一个访问器。访问器基本上是一个指针加上 scoped_lock 保护对元素的并发访问。如果没有锁,一个元素可能会被并发修改,从而导致数据竞争。因此,切勿直接使用指向 concurrent_hash_map 中元素的指针(除非受到访问器的保护)。

另外,您的任务不需要 find() 方法,因为如果元素不存在,insert() 方法会创建该元素。

根据Reference manual , HashMap 具有以下可能满足您需求的方法:

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

关于c++ - tbb 并发 HashMap 查找和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501591/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com