我正在寻找并发缓存结构。我正在使用微软的PPL,所以我有concurrent_unordered_map
类,但它似乎不是我需要的。我有一个哈希值,我需要将它与指针类型相关联,或者如果它已经在缓存中则返回该指针。我没有使用LRU或MRU缓存策略,并且永远不会删除值,因此它更像是并发memoize。
锁定现有的std::unordered_map
会不会更简单?
答案 0 :(得分:1)
我不知道微软的PPL。我刚看了Intel的concurrent_unordered_map的Intel Thread Building Blocks头文件,当密钥已经在地图中时,它的insert
函数返回false
作为返回对的第二部分。
这似乎正是您所需要的。做插入,如果它返回true
那么它是一个新的插入。如果它返回false
,那么它已经在地图中。
编辑:这里似乎有些混乱。我并不是说你应该总是运行插入。我的意思是你应该寻找值,如果它缺失,那么尝试插入。两个或多个线程可能偶尔会在插件上竞争,因此工作将会重复,但这应该是一个罕见的事件。