Используйте __sync_val_compare_and_swap
__sync_lock_test_and_set
, а не __sync_synchronize
.
Это имеет ту же функцию, что и InterlockedExchange.
Примерно так (непроверенный код!):
template<typename T> T InterlockedExchange(T& data, T& new_val)
{
return __sync_lock_test_and_set(&data, new_val);
}
РЕДАКТИРОВАТЬ:
Ой, я прочитал неправильно, вы хотели InterlockedExchange, а не InterlockedCompareExchange ... так что __sync_lock_test_and_set
(имя вводит в заблуждение-номер, но это именно то, что вы хотите).
См. здесь , внизу страницы.