gpt4 book ai didi

c++ - 为什么 boost lockfree freelist 大小被限制为最多 65535 个对象?

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

为什么 boost lockfree 大小固定为 65535 个对象?

typedef boost::lockfree::queue<int, boost::lockfree::fixed_size<true>> MyQueue;
MyQueue queue(1024*100);

上面的代码抛出异常。

我在代码中找到的原因是基于数组的空闲列表仅支持 16 位地址空间。

这是什么原因?我在 64 位 Linux 机器上使用它。那为什么要限制寻址到 2**16 项呢?队列是否使用“short int”进行索引?原子指令是否只适用于 16 位字长?

我应该怎么做才能拥有比这更大容量的固定大小队列?

最佳答案

无锁链表的Boost实现必须打ABA problem .一个常见的解决方法是向所考虑的数量添加额外的 tag 位。此外,Boost 必须在 32 位架构上运行,这意味着只能以原子方式操作 32 位值。

如果我们拆分 32 位值,我们可以存储 16 位指针和 16 位标记。无符号 16 位值限制为 65535 个不同的值。

关于c++ - 为什么 boost lockfree freelist 大小被限制为最多 65535 个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18103259/

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