gpt4 book ai didi

java - 从引用中窃取位

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:50 25 4
gpt4 key购买 nike

如何从一个地址窃取 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
}
如果我只需要一个额外的标志,则可以使用

AtomicReferenceAtomicStampedReference 可以使用,但效率不高,因为它会创建一个包含时间戳和引用的额外框。

在 C 中讨论了一个类似的问题 stealing bits from a pointer

最佳答案

你或许可以使用 sun.misc.Unsafe 来实现它

除其他外,它有许多 compareAndSwap 方法,可以处理任何对象中的任意二进制数据。

话虽如此,如果您要实现二叉搜索树,我建议您查看不可变的 persistent data structures .这些的优点包括:

  • 由于不变性,它们根据定义是线程安全的
  • 他们不需要锁
  • 一旦你开始做更复杂的事情(例如子树的快照),进行结构共享的能力将是一个巨大的性能胜利 - 基本上你避免了采取防御性副本的需要。

关于java - 从引用中窃取位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com