Как сказано в других ответах, префикс блокировки здесь неявный, поэтому на уровне ассемблера проблем нет.Проблема может лежать на уровне C (или C ++), когда вы используете его как встроенный ассемблер.Здесь вы должны убедиться, что компилятор не переупорядочивает инструкции относительно вашего xchg
.Если вы используете gcc (или двоюродных братьев), вы обычно делаете что-то вроде:
__asm__ __volatile__("xchgl %1, %0"
: "=r"(ret)
: "m"(*point), "0"(ret)
: "memory");
, который объявляет инструкцию как volatile , и добавляет «память» clobber.