好吧,我问的和this deleted question一样, 但我问得更直接。
我在同一个类的两个实例中有两个指针变量。我想以原子方式交换这些变量的内容(不是它们指向的内容,只是变量本身)。
我想尽可能避免锁定。
我该怎么做?
编辑:对于三个无数的“InterlockedExchangePointer”答案,请阅读 MSDN docs第一的。 InterlockedExchangePointer 将指针目标的值与堆栈上的值 寄存器交换。它(本身)不会交换内存位置中的两个指针。
最佳答案
我要冒昧地说你需要一个锁,而且这个问题没有一般情况下的无锁解决方案。
您需要从两个地址读取并以原子方式写回两个地址。据我所知,X86 只能从单个内存地址和寄存器原子地交换数据。我认为不可能交换两个内存地址的内容。
如果你能限制指针的位置,你就可以做到这一点。例如,如果可以保证指针在内存中相邻,则可以在循环中使用 64 位或 128 位比较/交换。
对于其他简单情况可能有解决方案,但我认为您不会为一般情况找到无锁解决方案。
关于c++ - 如何在 Windows 上自动交换两个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503628/