B tree 模块“github.com/google/btree”中的“copyOnWriteContext”是什么意思?
最近,我读了google/btree的源代码。但是我被structB tree 模块“github.com/google/btree”中的“copyOnWriteContext”是什么意思?,b-tree,B Tree,最近,我读了google/btree的源代码。但是我被structcopyOnWriteContext混淆了。它用于节点函数mutableFor,如下所示 func (n *node) mutableFor(cow *copyOnWriteContext) *node { if n.cow == cow { return n } fmt.Println("new node?") out := cow.newNode()
copyOnWriteContext
混淆了。它用于节点
函数mutableFor
,如下所示
func (n *node) mutableFor(cow *copyOnWriteContext) *node {
if n.cow == cow {
return n
}
fmt.Println("new node?")
out := cow.newNode()
if cap(out.items) >= len(n.items) {
out.items = out.items[:len(n.items)]
} else {
out.items = make(items, len(n.items), cap(n.items))
}
copy(out.items, n.items)
// Copy children
if cap(out.children) >= len(n.children) {
out.children = out.children[:len(n.children)]
} else {
out.children = make(children, len(n.children), cap(n.children))
}
copy(out.children, n.children)
return out
}
我检查了这个模块中的所有代码,发现只有一个地方可以创建copyOnWriteContext的实例。这是创建树的时间
func New(degree int) *BTree {
return NewWithFreeList(degree, NewFreeList(DefaultFreeListSize))
}
那么mutableFor
的含义是什么呢。因为在整个代码中只有一个copyOnWriteContext
。n.cow
始终等于paramcow