1

我有一个连续工作的享元模式,工厂std::map用来存储和提供对创建对象的访问。工厂返回iterator指向地图中对象的一个​​。工厂中的对象是常量,因此一旦插入它们就不会更新,除非它们被擦除。

我想让工厂同时使用tbb::concurrent_hash_map,但我不确定返回应该是什么。我可以使用iterator(应该是const_iterator?),但是文档说,当afindinsert. concurrent_hash_map所以我可以使用 aconst_accessor因为只需要只读访问,但这与串行实现(iteratorvs accessor)不同。

哪个更好用?类型的一致性(即两个迭代器)是否重要?串行和线程编译时选项都需要在那里。

4

1 回答 1

2

如果您不与访问地图的其他线程同时擦除元素,则可以tbb::concurrent_unordered_map改用。这也是一个基于散列的关联容器,但具有更简单且更像 STL 的 API。它不会通过insertand使迭代器无效find,但作为权衡,它不允许同时删除元素。

如果您确实需要同时删除元素,则 TBB 的唯一选择是tbb::concurrent_hash_map与访问器一起使用。

我还建议您在TBB 论坛上讨论您的用例。

于 2012-01-17T21:02:03.830 回答