在二叉树中,我试图以原子方式将父节点的左子节点替换为新节点。在下面的方法中,pnode.left
指向node
并且我正在尝试将其更改为replaceNode
.
在 line1 中,childPtr
正在指向pnode.left
In line2,oldChildPtr
正在指向pnode.left
In line3,childPtr
从指向 到 原子地更改pnode.left
为replaceNode
。
但pnode.left
不变。我知道这就是java中的工作方式。但是我该如何修改这段代码,以便pnode.left
原子地替换为replaceNode
.
atomicReplaceLeftChild(node,pnode,replaceNode)
{
AtomicReference<Node> childPtr = new AtomicReference<Node>(pnode.left);
Node oldChildPtr = childPtr.get();
childPtr.compareAndSet(oldChildPtr, replaceNode);
}