アトミック操作を行うためにアドレスから 2 つの MSB を盗むにはどうすればよいですか? 私は単一の単語CASをやろうとしています
例
public class Node
{
long key;
long value;
Node lchild; // format is flag1,flag2,address
Node rchild; // format is flag1,flag2,address
}
public void createNode()
{
Node n1 = new Node(); //this should create a node with format 0,0,address1
}
public void setFlag1(Node n1)
{
Now the new address should be in format 1,0,address1
}
public void setFlag2(Node n1)
{
Now the new address should be in format 0,1,address1
}
AtomicReference
追加のフラグが 1 つだけ必要な場合に使用できます。
AtomicStampedReference
を使用できますが、timeStamp と参照を含む余分なボックスが作成されるため、効率的ではありません。
C での同様の問題は 、ポインターからビットを盗むで説明されています。