高度平行的deque
Highly parallel deque
是否有高度并行的deque的实现(boost或其他)?特别是,我希望能够说出这样的话(伪代码):
parallel.for(deque.erase, list<locations>);
换言之,并行地删除deque中位置列表中传递的所有项目。同时,我不希望此操作阻止与此删除/插入无关的其他删除或插入。
因此,例如,线程1可以(并行)删除位置1、3、7、9处的项目,线程2(并行)插入到deque中(并行插入可以是push_back,除非试图插入到旧的擦除位置,否则看起来很容易),线程3可以(平行)删除位置2、4、8[注意,不同的线程擦除永远不会与擦除位置相交]。试图擦除已擦除的位置(包含sentinel值)是一个错误。这可能意味着,在进行某种压缩之前,位置是有状态的(这需要一个锁。
展望未来,我意识到,由于push_backs不填充擦除的值(?),deque可能会变得碎片化和增长(内存泄漏),但某种压缩似乎最终是可能的。
paracell_deque还应该允许锁定,在移除锁定之前不允许插入或删除。例如,在打印deque的状态(内容)时。。。
deque可以有多种实现策略,有些策略可能比其他策略更适合这种并行性。
我也意识到这个问题可能过于模糊,在给出有趣的答案之前就会被否决。
听起来您确实想要一个基于节点的容器(它不会使迭代器无效),但具有连续存储。
我建议使用Boost Intrusive在连续存储的元素之上构建一个链表。
然而,在此之前,我会使用你能想到的最简单的数据结构,直到你知道你到底想要什么以及为什么。
相关文章:
- Capacity of a deque
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- C++中deque数据结构的大O是什么?
- C++:如何根据地形高度更新玩家身高?
- 如何使用C++为我的容器 Deque 设置最大大小?
- 如何更改QComboBox项目的高度大小?
- 为什么 gcc 会给我可能未初始化的警告 deque::insert 带有过滤范围
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- C++ deque 消费者总是从生产者那里得到空队列
- 如何使用 C++ gdal 库将栅格地理从 EGM96 转换为 WGS84 椭球体高度基准面
- Deque 迭代器超出范围
- C++:如何正确地将 deque::front() 返回的变量从函数中传递出去?
- 有没有函数可以在擦除 c++ 中获取 deque.begin() 的 int 值?
- 为什么 deque 比队列快?
- 从具有父指针和左子树和右子树高度的树中删除
- Deque 中元素的随机访问如何提供恒定的时间复杂度?
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- 高度平行的deque