是否存在高度并行的双端队列的实现(增强或其他)?特别是,我希望能够说出这样的事情(伪代码):
parallel.for(deque.erase, list<locations>);
换句话说,并行删除在例如传递的所有项目。双端队列中的位置列表。同时,我不希望此操作阻止与此删除/插入无关的其他删除或插入。
因此,例如,线程1可以(并行)删除位置1,3,7,9处的项目,线程2(并行)插入到双端队列中(并行插入可以是push_back并且看起来很容易,除非尝试插入旧的删除位置),线程3可以(并行)删除位置2,4,8 [注意不同的线程擦除永远不会与擦除位置相交]。试图擦除已擦除的位置(保持标记值)是一个错误。这可能意味着位置是有状态的,直到发生一些压缩(这需要锁定。)删除的位置可以保存一个sentinel值,告诉你可以插入我的其他线程......所以接口可能不是push_back,而是push_available。 / p>
在外面思考,我意识到deque 可能变得支离破碎并且增长(内存泄漏),因为push_backs不会填充已删除的值(?),但最终可能会出现某种压缩。
paralell_deque还应允许锁定,除非锁定被移除,否则不允许插入或删除。例如,在打印deque的状态(内容)时...
deque可以有多种实施策略,有些可能比其他策略更适合这种并行性。
我也意识到这个问题可能过于模糊,并且在给出有趣答案之前会被击落。
答案 0 :(得分:2)
听起来你真的想要一个基于节点的容器(它不会使迭代器无效)但是需要连续存储。
我建议使用Boost Intrusive在连续存储的元素之上构建链接列表。
然而,在此之前,我会使用您能想到的最简单的数据结构,直到您 知道您想要什么以及为什么。