前端之家收集整理的这篇文章主要介绍了
c – 如何在Windows上自动交换两个指针?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧,我问的是和
this deleted question一样的东西,但我更直接地问它.
我在同一个类的两个实例中有两个指针变量.我想原子地交换这些变量的内容(不是它们的POINT,只是变量本身).
如果可能的话,我想避免锁.
我该怎么做呢?
编辑:对于三个“InterlockedExchangePointer”的答案,请先阅读MSDN docs. InterlockedExchangePointer将指针目标的值与堆栈寄存器上的值进行交换.它(本身)不会在内存位置交换两个指针.
我打算走出去,说你需要一个锁,并且没有一般情况下无锁
解决这个问题.
您需要从两个地址读取并以原子方式回写这两个地址.据我所知,X86只能从单个内存地址和寄存器中自动交换数据.我认为不可能交换两个内存地址的内容.
如果可以对指针的位置设置约束,则可以执行此操作.例如,如果可以保证指针在内存中相邻,则可以在循环中使用64位或128位比较/交换.
可能有其他简单案例的解决方案,但我认为你不会找到一般案例的无锁解决方案.
原文链接:https://www.f2er.com/c/115386.html