首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效并发树

有效并发树
EN

Stack Overflow用户
提问于 2012-06-25 12:54:48
回答 4查看 8K关注 0票数 14

我正在寻找一种实现并发树结构的有效方法。如果这有帮助,那么假设我有更多的读取访问权限,而不是对结构的更改。

树应该支持这些操作:

  • 添加和删除节点
  • 每次插入新节点时排序分支。
  • 遍历所有节点(没有ConcurrentModificationException)
  • 按路径查找元素
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-02 17:13:06

看看:谷歌代码上的并发树,它提供了一种无需锁定就可以修改树状结构的方法。

该项目为Java提供并发的基数和后缀树。它们支持并发读和写,并且读取是无锁的.它通过原子地将补丁应用到树上来工作。虽然这些类型的树可能不是您想要的,但是使用TreeDesign中描述的“修补”的方法对于任何类似树的结构都是有用的。

这些树用于高并发性读取--主要是用例,其中一个后台线程可能从树中插入或删除条目,而许多前台线程将继续不受修改的阻碍地遍历它。

票数 9
EN

Stack Overflow用户

发布于 2012-06-25 13:15:06

与您可能需要的最接近的ConcurrentSkipListSet结构是一个ConcurrentSkipListMap(或者是ConcurrentSkipListMap)。

如果您需要更多的自定义方法,则如果您具有层次式读写锁,则可以实现自定义树结构。下面是一个关于如何实现可重入读写锁的类似问题:https://stackoverflow.com/a/6154873/272388

票数 5
EN

Stack Overflow用户

发布于 2012-06-25 13:04:56

您可以在结构中使用读取器锁,多个线程可以读取当前的数据,但一次只能读取一个线程。如果某些线程试图修改结构,则在所有读取器都完成其读取之前,它无法进行修改。如果一个线程想要阅读,它只能在一个作者还没有工作的情况下才能读到,或者它需要做一些修改。也许看看这个可以帮上忙:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html

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

https://stackoverflow.com/questions/11189784

复制
相关文章

相似问题

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