InterlockedExchange против InterlockedExchangePointer

В чем разница между InterlockedExchange а также InterlockedExchangePointer?

Являются

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

а также

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

эквивалент?

Я должен перенести код на VC6, который не знает о Interlocked[...]Pointer функции.

Редактировать:

Я знаю по собственному опыту, что VC6 чрезвычайно глючит и что никто больше не может его использовать.

Тем не менее, я не принимаю решения, и ответ на первоначальный вопрос будет высоко оценен.

1 ответ

InterlockedCompareExchange принимает 32-битную переменную.

InterlockedCompareExchangePointer принимает переменную указателя размера, которая отличается в зависимости от целевой архитектуры.

Если вы нацеливаетесь на 32-битные и только 32-битные архитектуры, это будет хорошо, однако всякий раз, когда вы изменяете целевую архитектуру на 64-битную, следующее будет компилироваться и вести себя неприятно:

InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );
Другие вопросы по тегам