我有一个哈希映射,从字符串键到指向线程安全类的指针。此类的每个对象都包含一个互斥体,我用它来在其各种方法之间进行同步。
此外,每隔一段时间我想丢弃一段时间未使用的值。我希望能够安全地删除值指针并将其从哈希映射中删除,同时确保没有人使用我的值。
实现这一目标的最佳方法是什么(一般来说,在 C++ 中)?
我有一个哈希映射,从字符串键到指向线程安全类的指针。此类的每个对象都包含一个互斥体,我用它来在其各种方法之间进行同步。
此外,每隔一段时间我想丢弃一段时间未使用的值。我希望能够安全地删除值指针并将其从哈希映射中删除,同时确保没有人使用我的值。
实现这一目标的最佳方法是什么(一般来说,在 C++ 中)?
如果您希望人们使用您的哈希映射来获取这些指针,然后能够继续使用它们而不必通知您的哈希映射类他们已经完成了它,那么将共享指针存储在哈希映射中是最简单的计时方法实际对象删除到对象的最后一个用户完成它的时间。然后哈希映射可以随时删除它指向对象的共享指针。
存储和传递指向对象的共享指针 ( std::shared_ptr
)。使用std::shared_ptr::use_count
方法检查当前正在使用多少个指针
您还可以使用TBB库中的concurrent_hash_map。它使用访问器(一种带锁的智能指针)保护其元素的并发访问和生命周期