c – 为什么boost lockfree空闲列表大小限制为最多65535个对象?

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

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

上面的代码抛出异常.

我在代码中找到的原因是基于数组的freelists只支持16位地址空间.

这是什么原因?我在64位linux机器上使用它.那么为什么要将寻址限制在2 ** 16项?队列是否使用’short int’进行索引?原子指令只适用于16位字大小吗?

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

最佳答案
无锁列表的Boost实现必须与ABA problem作斗争.常见的解决方法是在正在考虑的数量上添加额外的标记位.此外,Boost必须运行在32位架构上,这意味着只能以原子方式操作32位值.

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

转载注明原文:c – 为什么boost lockfree空闲列表大小限制为最多65535个对象? - 代码日志