InterlockedExchange与InterlockedExchangePointer

时间:2012-12-12 10:27:40

标签: c++ atomic vc6 interlocked

InterlockedExchangeInterlockedExchangePointer之间的区别是什么?

if( 0 != InterlockedCompareExchange( ( void** ) &_myVariable
                                   , temp
                                   , 0
                                   ) )

if( 0 != InterlockedCompareExchangePointer( ( void** ) &_myVariable
                                          , temp
                                          , 0
                                          ) )

等效?

我必须将代码移植到VC6,后者不知道Interlocked[...]Pointer函数。

修改

根据我自己的经验,我知道VC6非常错误,并且没有人会再使用它了。

但是,我不是决策者,对原始问题的回答将受到高度赞赏。

1 个答案:

答案 0 :(得分:5)

InterlockedCompareExchange采用32位变量。

InterlockedCompareExchangePointer采用指针大小的变量,这取决于目标体系结构。

如果您的目标是32位且只有32位架构,那么它会很好,但是每当您将目标架构更改为64位时,以下内容都会编译并且表现得很糟糕:

InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );