gpt4 book ai didi

c++ - 从 std::shared_ptr 窃取位

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

我目前正在处理一个类作业,我需要在其中实现一个无锁链表。我的每个节点的结构本质上是:

class Node {
std::shared_ptr<Node> next;
long long key;
}

我需要以某种方式将额外的数据位嵌入到“下一个”指针中。我不能使用额外的 bool 字段,因为“下一个”指针需要使用 compare_exchange_strong() 自动更新。我还必须使用 std::shared_ptr 来实现其垃圾收集能力;在无锁数据结构上执行内存回收超出了我们目前在类(class)中学习的范围。

如果我使用的是一个普通的旧指针,我可以使用位操作运算符来“旋转”指针的高位,但显然这是行不通的,因为一旦我旋转了该位,指针就会指向一个无效的内存位置,当赋值运算符试图访问控制 block 时,会导致段冲突。

任何人都可以提供有关如何实现此目标的任何见解吗?

哦,对于那些好奇的人,我在 Linux 系统上使用 g++-4.8.2。

最佳答案

您似乎想在这里混合两种不同的东西。

在 shared_ptr 中干预指针并不是一个好主意。共享指针是线程安全的,但如果您使用原子操作,您可以自己完成。

不管怎样,之前建议的自定义删除器是这样完成的;

struct d { void operator()(foo* f){ delete f; } };

...然后您使用此创建一个 shared_ptr;

shared_ptr<bar> b(new bar, d());

...但为什么不先使用原子操作呢?

干杯!

关于c++ - 从 std::shared_ptr 窃取位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20007476/

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