InterlockedExchange 与 InterlockedExchangePointer
Posted
技术标签:
【中文标题】InterlockedExchange 与 InterlockedExchangePointer【英文标题】:InterlockedExchange vs. InterlockedExchangePointer 【发布时间】:2012-12-12 10:27:40 【问题描述】:InterlockedExchange
和 InterlockedExchangePointer
有什么区别?
是
if( 0 != InterlockedCompareExchange( ( void** ) &_myVariable
, temp
, 0
) )
和
if( 0 != InterlockedCompareExchangePointer( ( void** ) &_myVariable
, temp
, 0
) )
等价的?
我必须将代码移植到不知道Interlocked[...]Pointer
函数的VC6。
编辑:
根据我自己的经验,我知道 VC6 非常有问题,没有人会再使用它了。
但是,我不是决策者,非常感谢您回答最初的问题。
【问题讨论】:
你必须移植代码... 到 VC6?忘了它。 VC6 已停产,非常有问题,死了。不要为它/用它开发新代码,并从它远离迁移现有项目——从长远来看它会更便宜。 你试过msdn.microsoft.com/en-us/library/windows/desktop/ms683590.aspx和msdn.microsoft.com/en-us/library/windows/desktop/ms683609.aspx吗? (另外,AFAICS 第一个无法编译,第二个有多余的演员表) 【参考方案1】:InterlockedCompareExchange
采用 32 位变量。
InterlockedCompareExchangePointer
采用指针大小变量,根据目标架构不同。
如果您以 32 位和仅 32 位架构为目标,那会很好,但是,当您将目标架构更改为 64 位时,以下代码会编译并表现得很糟糕:
InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );
【讨论】:
以上是关于InterlockedExchange 与 InterlockedExchangePointer的主要内容,如果未能解决你的问题,请参考以下文章
找不到名为“interlockedexchange”的入口点
InterlockedExchange() 类型函数/内在函数的 MSDN 文档不一致?