在二叉树中,我试图以原子方式将父节点的左子节点替换为新节点。在下面的方法中,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);
}