InterlockedExchange与InterlockedExchangePointer

问题描述 投票:2回答:1

InterlockedExchangeInterlockedExchangePointer有什么区别?

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

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

当量?

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

编辑:

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

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

c++ atomic vc6 interlocked
1个回答
5
投票

InterlockedCompareExchange采用32位变量。

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

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

InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );
© www.soinside.com 2019 - 2024. All rights reserved.