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

标签 c++ windows

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

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

我想尽可能避免锁定。

我该怎么做?

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

最佳答案

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

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

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

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

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

相关文章:

c++ - 哪个运营商删除?

c++ - OpenCV 3.0 未定义的引用错误?

c++ - 与 QSerialPort 的基本通信

c# - 有没有办法将任意数据关联到 Windows 进程?

windows - VS2008会编译兼容Windows 7的二进制文件吗

java - 在 Windows 桌面上创建快捷方式图标

c++ - ffmpeg内存增加

windows - 如何在 Windows 上使用 git+mintty+mingw 获得彩色输出?

windows - 如何获得精确的 ping 测量值

c++ - 实时视频捕捉?