【发布时间】:2013-04-25 11:12:41
【问题描述】:
我有一个哈希映射,从字符串键到指向线程安全类的指针。这个类的每个对象都包含一个互斥体,我用它来在它的各种方法之间进行同步。
此外,每隔一段时间我想丢弃一段时间未使用的值。我希望能够安全地删除值指针并将其从哈希映射中删除,同时确保没有人使用我的值。
实现这一点的最佳方法是什么(一般来说,在 C++ 中)?
【问题讨论】:
标签: c++ concurrency thread-safety concurrenthashmap
我有一个哈希映射,从字符串键到指向线程安全类的指针。这个类的每个对象都包含一个互斥体,我用它来在它的各种方法之间进行同步。
此外,每隔一段时间我想丢弃一段时间未使用的值。我希望能够安全地删除值指针并将其从哈希映射中删除,同时确保没有人使用我的值。
实现这一点的最佳方法是什么(一般来说,在 C++ 中)?
【问题讨论】:
标签: c++ concurrency thread-safety concurrenthashmap
如果您希望人们使用您的哈希映射来获取这些指针,然后能够继续使用它们而无需通知您的哈希映射类他们已经完成了它,那么将共享指针存储在哈希映射中是最简单的将实际对象删除时间计算到对象的最后一个用户完成它的时间的方法。然后哈希映射可以随时删除它指向对象的共享指针。
【讨论】:
weak_ptr 会有所帮助。
将共享指针 (std::shared_ptr) 存储并传递给您的对象。使用std::shared_ptr::use_count方法查看当前有多少指针被使用
【讨论】:
您也可以使用TBB library 中的concurrent_hash_map。它使用访问器(一种带锁的智能指针)保护其元素的并发访问和生命周期
【讨论】: