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

前端之家收集整理的这篇文章主要介绍了c – 如何在Windows上自动交换两个指针?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧,我问的是和 this deleted question一样的东西,但我更直接地问它.

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

如果可能的话,我想避免锁.

我该怎么做呢?

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

解决方法

我打算走出去,说你需要一个锁,并且没有一般情况下无锁解决这个问题.

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

如果可以对指针的位置设置约束,则可以执行此操作.例如,如果可以保证指针在内存中相邻,则可以在循环中使用64位或128位比较/交换.

可能有其他简单案例的解决方案,但我认为你不会找到一般案例的无锁解决方案.

原文链接:https://www.f2er.com/c/115386.html

猜你在找的C&C++相关文章