Инструкция сборки Intel "lock xchg", вероятно, выполняет то, что вы хотите, но я не думаю, что есть функция-обертка GCC, чтобы сделать ее переносимой. Для этого вы застряли, используя встроенную сборку (не переносимую) или используя сравнение и обмен, и заставляя сравнение быть истинным (неэффективным). Надеюсь, это поможет: -)