- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为什么 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/
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章详解织梦标签{dede:freelist/}列表调用增加排序方式的代码由
在this file ,boost::lockfree::detail::freelist 类用于管理无锁数据结构(例如队列)的存储,使用 free list .deallocate_impl 方法用
为什么 boost lockfree 大小固定为 65535 个对象? typedef boost::lockfree::queue> MyQueue; MyQueue queue(1024*100)
我是一名优秀的程序员,十分优秀!