二分木で、親の左の子を新しいノードにアトミックに置き換えようとしています。以下のメソッドでpnode.left
は、 は を指してnode
おり、 に変更しようとしていreplaceNode
ます。
In line1
はchildPtr
In line2を指している
In line3は In line3 を指しており、 to から toへアトミックに変更されています。pnode.left
oldChildPtr
pnode.left
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);
}