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