boost如何在32位机器上避免ABA问题

how does boost avoid ABA issue on a 32 bit machine?

本文关键字:ABA 问题 机器 32位 boost      更新时间:2023-10-16

我正在阅读boost文档中的免锁部分,它说"使用固定大小的数组来存储内部节点",以避免在32位机器上出现ABA问题。有人能告诉我这部分在源代码中的位置吗?整个助推项目对我来说太大了,谢谢。

我没有指向源代码的指针,但文档对我来说似乎足够清晰。

当队列的大小事先已知时,他们可以使用带标记的索引,而不是使用带标记。这样,他们不需要指针的整个宽度(因为理论上节点可以分配到32位虚拟地址空间中的任何位置),而只需要足够的位来将索引值(基于0)分配到预先分配的节点阵列中。

所以,假设你想要一个最多有65536个元素的队列:使用指针,你需要32位(如果你可以依赖于以某种方式对齐的分配,则需要更少的位)来寻址元素,然后再为标签添加一些位,因为标签根本不适合一个32位的字。但是使用索引,只需要16位就可以寻址(好吧,索引)从0到65535的所有值。32位宽机器字的其余部分可用于存储标记值,并且在硬件级别只需要32位宽的CAS指令。