Como se dijo en las otras respuestas, el prefijo de bloqueo es implícito, así que no hay ningún problema en el nivel del ensamblador. El problema puede estar en el nivel C (o C++) cuando lo usa como ensamblador en línea. Aquí debe asegurarse de que el compilador no vuelva a ordenar las instrucciones con respecto a su xchg
. Si se está empleando gcc (o primos) lo más habitual es hacer algo como:
__asm__ __volatile__("xchgl %1, %0"
: "=r"(ret)
: "m"(*point), "0"(ret)
: "memory");
que se declare la instrucción tan volátil y agregue el clobber "memoria".
¿Qué plataforma/CPU? –