我正在寻找一种实现并发树结构的有效方法。如果这有帮助,那么假设我有更多的读取访问权限,而不是对结构的更改。
树应该支持这些操作:
发布于 2012-07-02 17:13:06
看看:谷歌代码上的并发树,它提供了一种无需锁定就可以修改树状结构的方法。
该项目为Java提供并发的基数和后缀树。它们支持并发读和写,并且读取是无锁的.它通过原子地将补丁应用到树上来工作。虽然这些类型的树可能不是您想要的,但是使用TreeDesign中描述的“修补”的方法对于任何类似树的结构都是有用的。
这些树用于高并发性读取--主要是用例,其中一个后台线程可能从树中插入或删除条目,而许多前台线程将继续不受修改的阻碍地遍历它。
发布于 2012-06-25 13:15:06
与您可能需要的最接近的ConcurrentSkipListSet结构是一个ConcurrentSkipListMap(或者是ConcurrentSkipListMap)。
如果您需要更多的自定义方法,则如果您具有层次式读写锁,则可以实现自定义树结构。下面是一个关于如何实现可重入读写锁的类似问题:https://stackoverflow.com/a/6154873/272388
发布于 2012-06-25 13:04:56
您可以在结构中使用读取器锁,多个线程可以读取当前的数据,但一次只能读取一个线程。如果某些线程试图修改结构,则在所有读取器都完成其读取之前,它无法进行修改。如果一个线程想要阅读,它只能在一个作者还没有工作的情况下才能读到,或者它需要做一些修改。也许看看这个可以帮上忙:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html
https://stackoverflow.com/questions/11189784
复制相似问题