2

InterlockedExchangeとはどう違いInterlockedExchangePointerますか?

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

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

同等?

関数を知らないVC6にコードを移植する必要がありInterlocked[...]Pointerます。

編集:

私自身の経験から、VC6 は非常にバグが多く、もう誰も使用しないことを知っています。

ただし、私は意思決定者ではないため、元の質問に対する回答をいただければ幸いです。

4

1 に答える 1

5

InterlockedCompareExchange32 ビット変数を取ります。

InterlockedCompareExchangePointerは、ターゲット アーキテクチャによって異なるポインター サイズの変数を取ります。

32 ビットと 32 ビット アーキテクチャのみを対象としている場合は問題ありませんが、ターゲット アーキテクチャを 64 ビットに変更すると、次のコードがコンパイルされて動作がおかしくなります。

InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );
于 2012-12-12T12:32:02.780 に答える