并发缓存

时间:2011-07-07 15:31:09

标签: concurrency c++11

我正在寻找并发缓存结构。我正在使用微软的PPL,所以我有concurrent_unordered_map类,但它似乎不是我需要的。我有一个哈希值,我需要将它与指针类型相关联,或者如果它已经在缓存中则返回该指针。我没有使用LRU或MRU缓存策略,并且永远不会删除值,因此它更像是并发memoize。

锁定现有的std::unordered_map会不会更简单?

1 个答案:

答案 0 :(得分:1)

我不知道微软的PPL。我刚看了Intel的concurrent_unordered_map的Intel Thread Building Blocks头文件,当密钥已经在地图中时,它的insert函数返回false作为返回对的第二部分。

这似乎正是您所需要的。做插入,如果它返回true那么它是一个新的插入。如果它返回false,那么它已经在地图中。

编辑:这里似乎有些混乱。我并不是说你应该总是运行插入。我的意思是你应该寻找值,如果它缺失,那么尝试插入。两个或多个线程可能偶尔会在插件上竞争,因此工作将会重复,但这应该是一个罕见的事件。