В чем разница между InterlockedExchange
а также InterlockedExchangePointer
?
Являются
if( 0 != InterlockedCompareExchange( ( void** ) &_myVariable
, temp
, 0
) )
а также
if( 0 != InterlockedCompareExchangePointer( ( void** ) &_myVariable
, temp
, 0
) )
эквивалент?
Я должен перенести код на VC6, который не знает о Interlocked[...]Pointer
функции.
Редактировать:
Я знаю из собственного опыта, что VC6 очень глючит и что никто больше не должен его использовать.
Тем не менее, я не принимаю решения, и ответ на первоначальный вопрос будет высоко оценен.
InterlockedCompareExchange
принимает 32-битную переменную.
InterlockedCompareExchangePointer
принимает переменную указателя размера, которая отличается в зависимости от целевой архитектуры.
Если вы нацеливаетесь на 32-битные и только 32-битные архитектуры, это будет хорошо, однако всякий раз, когда вы изменяете целевую архитектуру на 64-битную, следующее компилируется и ведет себя плохо:
InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );
Других решений пока нет …