gpt4 book ai didi

c++ - 如何在 Windows 上自动交换两个指针?

转载 作者:可可西里 更新时间:2023-11-01 13:18:38 24 4
gpt4 key购买 nike

好吧,我问的和this deleted question一样, 但我问得更直接。

我在同一个类的两个实例中有两个指针变量。我想以原子方式交换这些变量的内容(不是它们指向的内容,只是变量本身)。

我想尽可能避免锁定。

我该怎么做?

编辑:对于三个无数的“InterlockedExchangePointer”答案,请阅读 MSDN docs第一的。 InterlockedExchangePointer 将指针目标的值与堆栈上的值 寄存器交换。它(本身)不会交换内存位置中的两个指针。

最佳答案

我要冒昧地说你需要一个锁,而且这个问题没有一般情况下的无锁解决方案。

您需要从两个地址读取并以原子方式写回两个地址。据我所知,X86 只能从单个内存地址和寄存器原子地交换数据。我认为不可能交换两个内存地址的内容。

如果你能限制指针的位置,你就可以做到这一点。例如,如果可以保证指针在内存中相邻,则可以在循环中使用 64 位或 128 位比较/交换。

对于其他简单情况可能有解决方案,但我认为您不会为一般情况找到无锁解决方案。

关于c++ - 如何在 Windows 上自动交换两个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503628/

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