boost如何在32位机器上避免ABA问题
how does boost avoid ABA issue on a 32 bit machine?
我正在阅读boost文档中的免锁部分,它说"使用固定大小的数组来存储内部节点",以避免在32位机器上出现ABA问题。有人能告诉我这部分在源代码中的位置吗?整个助推项目对我来说太大了,谢谢。
我没有指向源代码的指针,但文档对我来说似乎足够清晰。
当队列的大小事先已知时,他们可以使用带标记的索引,而不是使用带标记。这样,他们不需要指针的整个宽度(因为理论上节点可以分配到32位虚拟地址空间中的任何位置),而只需要足够的位来将索引值(基于0)分配到预先分配的节点阵列中。
所以,假设你想要一个最多有65536个元素的队列:使用指针,你需要32位(如果你可以依赖于以某种方式对齐的分配,则需要更少的位)来寻址元素,然后再为标签添加一些位,因为标签根本不适合一个32位的字。但是使用索引,只需要16位就可以寻址(好吧,索引)从0到65535的所有值。32位宽机器字的其余部分可用于存储标记值,并且在硬件级别只需要32位宽的CAS指令。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 这个危险指针示例是否因为 ABA 问题而存在缺陷?
- 为什么 std::atomic:<T>:compare_exchange_* 不应该受到 ABA 问题的困扰?
- boost如何在32位机器上避免ABA问题
- 如何在这个无锁堆栈函数中防止未定义的行为和ABA问题