具有并发值的哈希映射(在C ++中)

时间:2013-04-25 11:12:42

标签: c++ concurrency thread-safety concurrenthashmap

我有一个哈希映射,从字符串键到指向线程安全类的指针。这个类的每个对象都包含一个互斥体,我用它在各种方法之间进行同步。

此外,我偶尔会丢弃一段时间未使用的值。我希望能够安全地删除值指针并将其从哈希映射中删除,同时确保没有人使用我的值。

实现这一目标的最佳方式是什么(通常,在C ++中)?

3 个答案:

答案 0 :(得分:2)

如果你希望人们使用你的哈希映射来获取这些指针,那么就可以继续使用它们而不必通知你的哈希映射类他们已经完成它,然后在哈希映射中存储共享指针是最简单的将实际对象删除的时间定义为对象的最后一个用户完成它的时间。然后,哈希映射可以随时自由地擦除它对象的共享指针。

答案 1 :(得分:0)

将共享指针(std::shared_ptr)存储并传递给您的对象。使用std::shared_ptr::use_count方法检查当前正在使用的指针数

答案 2 :(得分:0)

您还可以使用concurrent_hash_map中的TBB library。它使用访问器(一种带锁的智能指针)保护其元素的并发访问和生命周期