加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:50:32 所属栏目:百科 来源:网络整理
导读:好吧,我问的是和 this deleted question一样的东西,但我更直接地问它. 我在同一个类的两个实例中有两个指针变量.我想原子地交换这些变量的内容(不是它们的POINT,只是变量本身). 如果可能的话,我想避免锁. 我该怎么做呢? 编辑:对于三个“InterlockedExchang
好吧,我问的是和 this deleted question一样的东西,但我更直接地问它.

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

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

我该怎么做呢?

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

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读