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

时间:2013-08-07 12:21:49

标签: c++ boost c++11 lock-free

为什么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位字长吗?

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

1 个答案:

答案 0 :(得分:3)

提升锁定列表的实施必须与ABA problem作斗争。常见的解决方法是在正在考虑的数量上添加额外的tag位。此外,Boost必须运行在32位架构上,这意味着只能以原子方式操作32位值。

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