gpt4 book ai didi

c++ - boost 如何避免 32 位机器上的 ABA 问题?

转载 作者:行者123 更新时间:2023-11-28 02:41:23 25 4
gpt4 key购买 nike

我正在阅读 lock free boost 文档的一部分,它说“使用固定大小的数组来存储内部节点”以避免在 32 位机器上防止 ABA 问题。有人可以给我提示这部分在源代码中的位置吗?整个 boost 项目对我来说太大了,谢谢。

最佳答案

我没有指向源的指针,但文档对我来说似乎很清楚。

当队列大小时事先知道时,他们可以使用带标签的索引而不是使用带标签的指针。这样,不需要指针的整个宽度(因为理论上可以在 32 位虚拟地址空间中的任何位置分配节点),它们只需要足够的位来将索引值(从 0 开始)放入数组中预先分配的节点数。

因此,假设您想要一个最多包含 65536 个元素的队列:使用指针,您需要 32 位(如果您可以依靠以某种方式对齐的分配,则需要更少)来寻址该元素,并且然后是标签,它完全不适合单个 32 位字。但是使用索引,您只需要 16 位来寻址(好吧,索引)从 0 到 65535 的所有值。其余的 32 位宽机器字可用于存储标记值,并且只有 32 位宽硬件级别需要 CAS 指令。

关于c++ - boost 如何避免 32 位机器上的 ABA 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com