簡體   English   中英

使B + Tree並發線程安全

[英]Make a B+ Tree concurrent thread safe

我在Java中實現了一個B + Tree。 現在我想知道允許並發插入的最佳方法是什么。 我的想法是鎖定一個節點,如果它是maxFilled -1(這意味着一個分裂事件接近)。 否則我只會在班次期間鎖定陣列。 但是這樣可能會將節點鎖定在非常接近根的位置,因此也會鎖定太多的子節點。 有沒有更好的方法或最佳實踐如何使B +樹線程安全?

您可以實現B樹的無鎖版本。

這種方法使得需要拆分的節點逐漸被標記為凍結(通過使用原子比較和交換操作將節點中的各個條目逐個標記為凍結,直到它被完全凍結)。 讀者可以在前往樹的其他部分的路上繼續瀏覽部分/完全凍結的節點,從而確保讀者的高並發性。 一個完全凍結的節點被替換,后來被垃圾收集,這對於具有垃圾收集的Java很有效。

文中詳細記錄了詳細信息,沒有必要在這里復制它們。 該圖(摘自論文)顯示了以下好處:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM