使B + Tree并发线程安全

时间:2015-07-03 09:56:39

标签: java multithreading b-tree

我在Java中实现了一个B + Tree。现在我想知道允许并发插入的最佳方法是什么。我的想法是锁定一个节点,如果它是maxFilled -1(这意味着一个分裂事件接近)。否则我只会在班次期间锁定阵列。但是这样可能会将节点锁定在非常接近根的位置,因此也会锁定太多的子节点。有没有更好的方法或最佳实践如何使B + Tree线程安全?

1 个答案:

答案 0 :(得分:4)

您可以实施lock-free version of a B-tree.

此方法导致需要拆分的节点逐渐标记为冻结(通过使用原子比较和交换操作将节点中的各个条目逐个标记为冻结,直到它完全冻结)。 读者可以在前往树的其他部分的路上继续浏览部分/完全冻结的节点,从而确保读者的高并发性。 一个完全冻结的节点被替换,后来被垃圾收集,这与Java有很好的垃圾收集效果。

详细信息在文件中有详细记载,没有必要在这里复制它们。该图(摘自论文)显示了这一好处:

enter image description here