InterlockedExchange против InterlockedExchangePointer

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

Являются

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

а также

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

эквивалент?

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

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

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

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

2

Решение

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

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

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

InterlockedCompareExchange( ( LONG volatile * ) _myPointer , 1, 0 ) );
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]