c++ - 并发工厂/轻量级与 TBB

标签 c++ factory-pattern tbb

我有一个串行工作的享元模式,其中工厂使用 std::map 来存储和提供对创建对象的访问。工厂返回指向 map 中对象的 iterator。工厂中的对象是常量,所以一旦插入就不会更新,除非被删除。

我想使用 tbb::concurrent_hash_map 让工厂并发,但我不确定返回值应该是什么。我可以使用 iterator(应该是 const_iterator 吗?),但是文档说当执行 find插入concurrent_hash_map中。所以我可以使用 const_accessor 因为只需要只读访问,但这与串行实现不同(iterator vs accessor) .

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

最佳答案

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

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

我还建议您在 the TBB forum 讨论您的用例.

关于c++ - 并发工厂/轻量级与 TBB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901357/

相关文章:

opencv - 使用mingw构建tbb时链接错误,同时opencv运行时错误

c++ - 在 boost 状态图库中捕获丢弃的事件

c# - 这个模型工厂如何知道使用哪种方法?

c++ - 将指向一个派生类的指针传递给另一个派生类

cdi - 使用 CDI 的工厂模式取决于运行时参数

java - 使用 Spring 3 注解实现一个简单的工厂模式

c++ - 共享内存中的 Intel TBB concurrent_queue?

c++ - parallel_invoke 待定中的相同方法

c++ - 混合 std::cout 的奇怪输出

c++ - OpenCV:改变像素的颜色