首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何排序TBB concurrent_vector或concurrent_queue?

如何排序TBB concurrent_vector或concurrent_queue?
EN

Stack Overflow用户
提问于 2010-09-21 01:59:50
回答 3查看 1.6K关注 0票数 1

现在我有了一个求解器,因为我需要在concurrent_vector或队列中保留一组自定义的数据类型对象。它必须是并发的,因为对象来自不同的threads.With这个并发容器,我希望对这些对象进行排序,消除重复,并在其他线程需要它们时将它们发回。

然而,我知道TBB提供了concurrent_vector和concurrent_queue,它们可以从不同的线程并发地读写。但是如何对容器内的对象进行排序呢?每个人都知道怎么做吗?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2011-10-05 07:45:16

我想你对TBB并发容器有一些误解。你可以参考TBB wiki

TBB并发容器是否使用操作系统同步对象?

  • 不,它们不会。TBB并发容器利用TBB用户级同步基元和原子操作。

在不加锁的情况下访问和修改tbb::concurrent_vector的元素是线程安全的吗?

  • 否,您必须显式使用锁。

因此,concurrent_vector不支持线程安全的多线程读写。我希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2010-12-09 00:25:32

我认为生产者线程应该与消费者线程并发运行。因此,如果不需要对元素进行排序并使其唯一,那么一个简单的concurrent_queue就足够了。

如果你只需要让它们是唯一的,你可以使用tbb::concurrent_hash_map

然而,如果你真的想对元素进行排序,你需要类似于concurrent_set (有序的)这样的东西,这是相当复杂的,并且在tbb中不存在。因此,如果你真的需要对这些元素进行排序,我建议使用一个简单的锁,它必须用于将元素放入容器中(例如std::set)以及从容器中检索元素。

票数 1
EN

Stack Overflow用户

发布于 2011-10-15 06:33:20

concurrent_vector与std::sort一起工作,tbb & ppl (in the sample pack)都提供了可以与其一起使用的并行排序。一个并行版本的std::unique在删除重复项时甚至更有用,但您必须构建自己的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3754095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档