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 ) );