InterlockedExchange
和InterlockedExchangePointer
之间的区别是什么?
是
if( 0 != InterlockedCompareExchange( ( void** ) &_myVariable
, temp
, 0
) )
和
if( 0 != InterlockedCompareExchangePointer( ( void** ) &_myVariable
, temp
, 0
) )
等效?
我必须将代码移植到VC6,后者不知道Interlocked[...]Pointer
函数。
修改
根据我自己的经验,我知道VC6非常错误,并且没有人会再使用它了。
但是,我不是决策者,对原始问题的回答将受到高度赞赏。
答案 0 :(得分:5)
InterlockedCompareExchange
采用32位变量。
InterlockedCompareExchangePointer
采用指针大小的变量,这取决于目标体系结构。
如果您的目标是32位且只有32位架构,那么它会很好,但是每当您将目标架构更改为64位时,以下内容都会编译并且表现得很糟糕:
InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );