В GCC есть
встроенные функции вида _sync_val_compare_and_swap().
Под Solaris можно сделать #include <atomic.h>, где есть функции вида atomic_cas().
Под Windows — API из разряда InterlockedCompareExchange().
Универсального решения не знаю. Несколько раз встречал для этого дела inline assembler под #ifdef'ами для разных платформ.