java - 从引用中窃取位

aru*_*zhi 6 c java java.util.concurrent concurrent-programming compare-and-swap

如何从地址窃取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
}
Run Code Online (Sandbox Code Playgroud)

AtomicReference如果我只需要一个额外的标志,可以使用. AtomicStampedReference可以使用,但它没有效率,因为它创建了一个包含timeStamp和引用的额外框.

从指针窃取位时讨论了C中的类似问题

kes*_*lam 0

对于使用 Java 工作,我可以给您的最佳建议是对数组索引而不是地址进行位操作,因为 Java 不公开地址。