c – 如何在Windows上自动交换两个指针?
发布时间:2020-12-16 07:50:32 所属栏目:百科 来源:网络整理
导读:好吧,我问的是和 this deleted question一样的东西,但我更直接地问它. 我在同一个类的两个实例中有两个指针变量.我想原子地交换这些变量的内容(不是它们的POINT,只是变量本身). 如果可能的话,我想避免锁. 我该怎么做呢? 编辑:对于三个“InterlockedExchang
好吧,我问的是和
this deleted question一样的东西,但我更直接地问它.
我在同一个类的两个实例中有两个指针变量.我想原子地交换这些变量的内容(不是它们的POINT,只是变量本身). 如果可能的话,我想避免锁. 我该怎么做呢? 编辑:对于三个“InterlockedExchangePointer”的答案,请先阅读MSDN docs. InterlockedExchangePointer将指针目标的值与堆栈寄存器上的值进行交换.它(本身)不会在内存位置交换两个指针. 解决方法
我打算走出去,说你需要一个锁,并且没有一般情况下无锁解决这个问题.
您需要从两个地址读取并以原子方式回写这两个地址.据我所知,X86只能从单个内存地址和寄存器中自动交换数据.我认为不可能交换两个内存地址的内容. 如果可以对指针的位置设置约束,则可以执行此操作.例如,如果可以保证指针在内存中相邻,则可以在循环中使用64位或128位比较/交换. 可能有其他简单案例的解决方案,但我认为你不会找到一般案例的无锁解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |