我怎样才能在Windows上primefaces交换两个指针?

好的,我问这个被删除的问题是一样的,但是我直接问了一下。

在同一个类的两个实例中,我有两个指针variables。 我想交换这些variables的内容(不是它们指向什么,只是variables本身)。

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

我该怎么做呢?

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

我要出去走一走,说你需要一个锁,而且这个问题没有一般的无锁解决方案。

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

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

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

您正在寻找swap的原子互锁版本。

据我所知,没有办法只使用Windows API原语做这个,也没有明确的锁定。 由其他人推荐的各种Interlocked功能将不起作用,因为只有一个传递参数被改变。 你想改变他们两个。

我也可以指出, Interlocked功能只是相互关联的。 如果您有另一块代码更新其中一个指针,但不使用“ Interlocked ,则代码不再安全。 我确信你意识到这一点,但我想我会提到它。

据我所知,你需要使用库或编写你自己的代码来处理这个问题。

检查x86处理器的xchg指令,如果他们做了你想要的,那么你可以将它们包装在内联汇编函数中。 所有的处理器单指令都保证是原子的。